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)
滚动会话现在存在于快速会话中。 在选项中将滚动属性设置为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(); }
- ExpressJS 3.0如何将res.locals传递给玉视图?
- TypeError:无法在Object.handle中读取未定义属性'csrfSecret' – 使用Node.js
- 会话在两个本地Node.js服务器上
- 在Express.js中使用会话MemoryStore不定义req.session
- 在明确的js会话中未定义的错误
- 如何在Express 4.0中发送Flash消息?
- Node Express无法设置发布请求的会话
- 你可以在RESTFUL环境中使用NodeJs Passport Sessions吗?
- loginTwitter OAuth没有会话aka token_secret(AngularJS失败)