将这个问题带到SO,因为快递组没有答案。
我正在设置会话 maxAge = 900000,并且我看到会话 cookie 上的 expires 属性设置正确。但是,在后续请求中,不会延长超时。它永远不会延长,并且 cookie 最终会过期。
会话中间件文档说 Session#touch() 不是必需的,因为会话中间件会为我完成。我实际上尝试手动调用req.session.touch()
,但没有任何作用,我也尝试在req.session.cookie
上设置 maxAge,但没有任何作用:-(
我是否缺少自动延长活动会话的设置?除了在每个请求上手动重新创建 cookie 之外,还有其他方法可以在最终用户活动后延长会话超时吗?
编辑:我在Express v3中遇到了这个问题。我不是 100% 确定,但我认为快速更新日志中的这条注释可能是罪魁祸首:
- 将session()更改为仅在修改时设置cookie(哈希会话json)
滚动会话现在存在于快速会话中。在选项中将滚动属性设置为 true,它将通过设置 maxAge 偏移量来重新计算到期值,应用于当前时间。
https://github.com/expressjs/session/issues/3
https://github.com/expressjs/session/issues/33
https://github.com/expressjs/session(搜索滚动)
例如,请注意rolling
:
app.use(session({
secret: 'a secret',
cookie: {
path: '/',
httpOnly: true,
secure: false,
maxAge: 10 * 60 * 1000
},
rolling: true
}));
任何人遇到相同问题的解决方案:
function (req, res, next) {
if ('HEAD' == req.method || 'OPTIONS' == req.method) return next();
// break session hash / force express to spit out a new cookie once per second at most
req.session._garbage = Date();
req.session.touch();
next();
}