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

jck*_*111 26 session session-cookies node.js express

因为快递集团没有答案,所以提出这个问题.

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

会议中间件文档说,活动#触摸()是没有必要的,因为会议将中间件为我做到这一点.我实际上尝试req.session.touch()手动调用,但没有做任何事情,我也试过设置maxAge req.session.cookie也没有做任何事情:-(

我错过了某个设置以自动扩展活动会话吗?如果没有在每个请求上手动重新创建cookie,还有其他方法可以在最终用户活动后延长会话超时吗?


编辑:我在快递v3中遇到了这个问题.我不是百分百肯定,但我认为来自快速更新日志的这个说明可能是罪魁祸首:

gdw*_*dw2 28

滚动会话现在存在于快速会话中.在选项中将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
}));
Run Code Online (Sandbox Code Playgroud)

  • 根据快速会话模块提供的最新配置选项,这应该是可接受的答案. (2认同)

jck*_*111 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();

}
Run Code Online (Sandbox Code Playgroud)

  • 对我来说好像很奇怪的默认行为! (12认同)
  • 这不应该被报告为错误吗? (2认同)