You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExpressJS中res.cookie的maxAge与expires不匹配,如何设置10年有效期Cookie?

在ExpressJS中设置10年有效期Cookie的问题

我在ExpressJS应用中尝试设置一个有效期为10年的Cookie,代码如下:

res.cookie('sessionId', session.sessionId, {
  sameSite: 'Lax',
  httpOnly: true,
  maxAge: 10*365*24*60*60*1000,
})

但实际该Cookie仅能维持36天而非10年。排查时我在Chrome的Network面板中发现两个问题:

  • 自动设置了Expires字段(我并未主动配置),但该字段的取值正确(当前日期+10年);
  • Max-Age字段的取值与我代码中设置的数值不符。

请问如何正确设置有效期为10年的Cookie?


问题原因

你设置的maxAge数值(10年对应的毫秒数315360000000)超出了浏览器对Max-Age字段的32位整数限制(最大值为2147483647毫秒,约24.8天),浏览器会自动截断这个值,导致Cookie有效期远短于预期。虽然Express会根据maxAge自动生成正确的expires字段,但部分浏览器会优先采用Max-Age的截断后数值,最终出现有效期不符的情况。

解决方法

直接配置expires字段来指定10年后的具体日期,绕开maxAge的数值溢出问题:

// 计算10年后的日期对象
const tenYearsLater = new Date();
tenYearsLater.setFullYear(tenYearsLater.getFullYear() + 10);

res.cookie('sessionId', session.sessionId, {
  sameSite: 'Lax',
  httpOnly: true,
  expires: tenYearsLater
});

这样浏览器会优先使用expires字段的正确日期,确保Cookie能维持10年有效期。

内容的提问来源于stack exchange,提问作者adamsfamily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 04:56:09