# 认识 Cookie
- Cookie(复数形态 Cookies),又称为 “小甜饼”。类型为 “小型文本文件,某些网站为了辨别用户身份而存储在用户本地终端(Client Side)上的数据。
- 浏览器会在特定的情况下携带上 cookie 来发送请求,我们可以通过 cookie 来获取一些信息;
- Cookie 总是保存在客户端中,按在客户端中的存储位置,Cookie 可以分为内存 Cookie 和硬盘 Cookie。
- 内存 Cookie 由浏览器维护,保存在内存中,浏览器关闭时 Cookie 就会消失,其存在时间是短暂的;
- 硬盘 Cookie 保存在硬盘中,有一个过期时间,用户手动清理或者过期时间到时,才会被清理;
- 如果判断一个 cookie 是内存 cookie 还是硬盘 cookie 呢?
- 没有设置过期时间,默认情况下 cookie 是内存 cookie,在关闭浏览器时会自动删除;
- 有设置过期时间,并且过期时间不为 0 或者负数的 cookie,是硬盘 cookie,需要手动或者到期时,才会删除;
# cookie-server
# package.json
{ | |
"name": "cookie-server", | |
"version": "1.0.0", | |
"description": "", | |
"main": "index.js", | |
"scripts": { | |
"test": "echo \"Error: no test specified\" && exit 1" | |
}, | |
"author": "", | |
"license": "ISC", | |
"dependencies": { | |
"koa": "^2.13.4", | |
"koa-router": "^10.1.1" | |
} | |
} |
# server
const Koa = require('koa'); | |
const Router = require('koa-router'); | |
const app = new Koa(); | |
const testRouter = new Router(); | |
// 登录接口 | |
testRouter.get('/test', (ctx, next) => { | |
//maxAge 对应毫秒 | |
ctx.cookies.set("name", "lain", { | |
maxAge: 60 * 1000, | |
httpOnly: false | |
}) | |
ctx.body = "test"; | |
}); | |
testRouter.get('/demo', (ctx, next) => { | |
// 读取 cookie | |
const value = ctx.cookies.get('name'); | |
ctx.body = "你的cookie是" + value; | |
}); | |
app.use(testRouter.routes()); | |
app.use(testRouter.allowedMethods()); | |
app.listen(8000, () => { | |
console.log("服务器启动成功~"); | |
}) |
# cookie 常见的属性
- cookie 的生命周期:
- 默认情况下的 cookie 是内存 cookie,也称之为会话 cookie,也就是在浏览器关闭时会自动被删除;
- 我们可以通过设置 expires 或者 max-age 来设置过期的时间;
- expires:设置的是 Date.toUTCString (),设置格式是;expires=date-in-GMTString-format;
- max-age:设置过期的秒钟,;max-age=max-age-in-seconds (例如一年为 606024*365);
- cookie 的作用域:(允许 cookie 发送给哪些 URL)
- Domain:指定哪些主机可以接受 cookie
- 如果不指定,那么默认是 origin,不包括子域名。
- 如果指定 Domain,则包含子域名。例如,如果设置 Domain=mozilla.org,则 Cookie 也包含在子域名中(如 developer.mozilla.org)。
- Path:指定主机下哪些路径可以接受 cookie
- 例如,设置 Path=/docs,则以下地址都会匹配:
- /docs
- /docs/Web/
- /docs/Web/HTTP
- 例如,设置 Path=/docs,则以下地址都会匹配:
- Domain:指定哪些主机可以接受 cookie
# 客户端设置 cookie
-
js 直接设置和获取 cookie:
console.log(document.cookie)
-
这个 cookie 会在会话关闭时被删除掉;
// 设置过期时间就是本地 cookie,不设置就是内存 cookie
document.cookie = 'name=lain'
document.cookie = 'age=16'
-
设置 cookie,同时设置过期时间(默认单位是秒钟)
document.cookie = 'name=lain;max-age=10'
-
删除 cookie
document.cookie = "name=lain;max-age=0"