服务器端Cookie的常见操作
HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据。浏览器会存储 cookie 并在下次向同一服务器再发起请求时携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器——如保持用户的登录状态。Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。
1、添加cookie
Cookie有两个属性可以用于控制存活时长: Expires 和 Max-Age. Expires指定一个时间点, 超过这个时间点之后客户端Cookie过期(将会由浏览器清除). Max-Age指定浏览器自从收到该cookie后可以保存多少时间, 单位是秒(根据框架的设计有关系,express中就是毫秒)。
这个操作一般是在服务端完成的,通过响应的header设置浏览器的cookie,下面是express框架里面相关的参数。
更多查看: http://expressjs.com/en/api.html#res.cookie
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
domain | String | 当前app的domain | cookie对应的domain名称 |
encode | Function | encodeURIComponent | 一个编码cookie的同步函数 |
expires | Date | 一个GMT标准的过期时间. 不设置或者设置为0时,创建一个会话cookie | |
httpOnly | Boolean | 设置cookie是否只有浏览器可以访问 | |
maxAge | Number | 设置cookie相对于当前时间的毫秒数. 优先级高于Expires(老版本IE只能识别Expires。不支持maxAge) | |
path | String | / | Cookie生效的路径. |
secure | Boolean | 设置Cookie仅仅在https环境下可以访问 | |
signed | Boolean | Indicates if the cookie should be signed. | |
sameSite | Boolean or String | Value of the “SameSite” Set-Cookie attribute. More information at https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00#section-4.1.1. |
我们在请求设置了cookie之后,我们发起请求,就会看到响应头里面的Set-Cookie字段。
2、删除cookie
删除cookie有两种方式:
- 使用空值覆盖同名的cookie;
- 设置同名cookie的过期时间为现在(当前时间);
使用Nodejs(express)实践
// 检查请求中是否携带cookie
router.get('/', function (req, res, next) {
console.log(req.cookies.name);
res.render('index', { title: 'Express' });
});
// 设置cookie
router.get('/set-cookie', function (req, res, next) {
res.cookie('name', 'zhangsan', {
domain: 'localhost',
// expires: '',
httpOnly: true,
maxAge: 10000 // 毫秒,10s之后浏览器会删除cookie
});
res.json({ content: "设置cookie成功" });
});