ExpressJS会话尽pipe活动即将到期

把这个问题带到SO,因为快递小组没有答案 。

我设置会话maxAge = 900000,我看到会话cookie的expires属性设置正确。 但是,在随后的请求中,超时不会被延长。 它永远不会延长,cookie最终会过期。

会话中间件文档说Session#touch()不是必须的,因为会话中间件会为我做。 我实际上尝试手动调用req.session.touch() ,并没有做任何事情,我也尝试在req.session.cookie上设置req.session.cookie ,并且没有做任何事情:-(

我是否错过了某个地方的设置来自动扩展活动会话? 除了在每个请求上手动重新创buildCookie之外,还有其他方法可以在最终用户活动之后延长会话超时吗?


编辑:我在快递v3中遇到这个问题。 我不是100%肯定的,但我认为这个来自明确变更日志的logging可能是罪魁祸首:

  • 更改会话()只修改set-cookie(哈希会话json)

       

网上收集的解决方案 "ExpressJS会话尽pipe活动即将到期"

滚动会话现在存在于快速会话中。 在选项中将滚动属性设置为true,它将通过设置应用于当前时间的maxAge偏移来重新计算到期值。

https://github.com/expressjs/session/issues/3

https://github.com/expressjs/session/issues/33

https://github.com/expressjs/session (search滚动)

例如,注意rolling

 app.use(session({ secret: 'a secret', cookie: { path: '/', httpOnly: true, secure: false, maxAge: 10 * 60 * 1000 }, rolling: true })); 

以下是解决scheme,以防其他人有相同的问题:

 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(); }