27

由于快递组没有答案,因此将这个问题提交给 SO 。

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

会话中间件文档说 Session#touch() 不是必需的,因为会话中间件会为我做这件事。我实际上尝试req.session.touch()手动调用但什么也没做,我也尝试设置 maxAgereq.session.cookie并且什么也没做:-(

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


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

4

2 回答 2

33

滚动会话现在存在于快速会话中。在选项中将 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
}));
于 2014-07-17T03:25:27.203 回答
19

如果其他人有同样的问题,这是解决方案:

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

}
于 2013-01-25T20:30:14.213 回答