移动端Google Chrome重启后首次请求不携带Express.js设置的Cookie
问题原因
- 核心原因为当前设置的是会话Cookie:Express的
res.cookie方法未指定expires或maxAge参数时,默认生成会话级Cookie,生命周期与浏览器进程绑定,浏览器进程完全关闭后这类Cookie会被系统自动清理,因此重启浏览器后首次请求无法携带该Cookie。 - 次要排查点:若配置有效期后问题仍存在,可检查移动端Chrome是否开启了「关闭浏览器时清除Cookie和站点数据」的隐私配置,该配置默认处于关闭状态,绝大多数场景下问题均由未设置Cookie有效期导致。
修复方案
修改Cookie设置逻辑,明确指定Cookie的持久化有效期即可,修改后的代码示例如下:
const app = require('express')() app.get('/', (req, res) => { // 配置maxAge参数指定Cookie有效期,示例为7天有效,单位为毫秒 res.cookie('hello-world', 'this-is-the-value-of-cookie', { maxAge: 7 * 24 * 60 * 60 * 1000, httpOnly: true, // 若需要前端JavaScript读取该Cookie可设为false,否则建议开启提升安全性 path: '/' }) res.json(req.headers) }) app.listen(80, '0.0.0.0')
如果需要该Cookie在10.0.2.2.nip.io的所有子域名下生效,可额外添加domain: '.10.0.2.2.nip.io'配置项。
验证步骤
- 修改代码后重启Express服务
- 首次访问页面完成Cookie设置,刷新确认Cookie生效
- 完全关闭移动端Chrome进程后重新打开,访问服务即可看到请求头已正常携带
hello-worldCookie。
内容的提问来源于stack exchange,提问作者Alireza Beitari
相关产品推荐
相关产品推荐

