尽管有活动,ExpressJS会话即将到期

时间:2013-01-22 17:48:44

标签: node.js session express session-cookies

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的这个说明可能是罪魁祸首:

  

2 个答案:

答案 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();

}