自express group didn't have an answer以来将此问题提交给SO。
我正在设置会话maxAge = 900000,我看到会话cookie上的expires属性设置正确。 但是,在后续请求中,不会延长超时。它永远不会被扩展,cookie最终会过期。
session middleware docs说Session#touch()不是必需的,因为会话中间件会为我做。我实际上尝试手动调用req.session.touch()
并且没有做任何事情,我也尝试在req.session.cookie
上设置maxAge并且什么也没做: - (
我错过了某个设置以自动扩展活动会话吗?如果没有在每个请求上手动重新创建cookie,还有其他方法可以在最终用户活动后延长会话超时吗?
编辑:我在快递v3中遇到过这个问题。我不是百分百肯定,但我认为express changelog的这个说明可能是罪魁祸首:
答案 0 :(得分:26)
滚动会话现在存在于快速会话中。在选项中将rolling属性设置为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
}));
答案 1 :(得分:18)
以下是其他人有同样问题的解决方案:
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();
}