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



将这个问题带到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();
}

最新更新