服务器端Cookie的常见操作

HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据。浏览器会存储 cookie 并在下次向同一服务器再发起请求时携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器——如保持用户的登录状态。Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。

MDN – HTTP Cookie

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字段。

image.png

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成功" });
});

3、参考资料

留下回复