Express使用cookie-parser设置Cookie过期时间始终为30分钟问题求助
问题排查方案
属性拼写&类型错误:第一种写法中的
expire是错误属性名,Express 中指定绝对过期时间的正确属性为expires,且值必须为Date实例,不能直接传入时间戳,正确写法如下:res.cookie('mycookie', 'value',{expires: new Date(Date.now() + 3600000), secure: true, httpOnly: true});错误写法会导致该属性被忽略,框架会使用默认的会话级过期规则,或被其他逻辑覆盖配置。第二种通过
maxAge设置过期时长的写法语法本身没有问题,若该写法也无法生效,继续排查以下问题。服务端与客户端时间差校验:检查部署服务的服务器系统时间、时区是否和访问端一致,如果服务器时间比客户端慢30分钟,你配置的1小时过期时间在客户端视角就只剩30分钟,会触发提前过期。
上层代理/全局中间件的Cookie覆盖逻辑排查:
- 确认Nginx、CDN等反向代理层是否存在修改
Set-Cookie响应头、强制修改Cookie过期时间的规则 - 排查项目中是否有全局中间件、session相关中间件在你设置Cookie之后,重写了同名Cookie的配置,比如统一设置30分钟过期的逻辑
- 确认Nginx、CDN等反向代理层是否存在修改
浏览器端实际Cookie配置校验:打开浏览器开发者工具的「应用/Application」面板,找到对应域名下的
mycookie,查看它的实际过期时间属性:- 如果显示的过期时间就是30分钟,说明问题出在服务端返回时就已经被修改
- 如果显示的过期时间符合1小时的配置,但实际30分钟就被清除,检查浏览器是否开启了Cookie自动清理、隐私限制规则,或者是否有同域名下其他接口写入了同名Cookie覆盖了你的配置
内容的提问来源于stack exchange,提问作者John doe
相关产品推荐
相关产品推荐

