【问题标题】:Express.js and connect-mongo session durationExpress.js 和 connect-mongo 会话持续时间
【发布时间】:2013-10-17 04:26:58
【问题描述】:

我使用 express.session 和 connect-mongo 来存储用户会话。 我从现在开始将 cookie maxAge 设置为 2 周,但我想要的是,如果用户在这 2 周内处于活动状态,则会话会延长 2 周,这样当他 2 周不活动时,他的会话就会被删除(两者cookie 和 mongo 中的会话)。 但问题是当他访问一个页面时,会话在 MongoDB 中得到更新,但是 cookie 将在 2 周内过期,并且不会改变它的“过期”。 这是我的代码:

app.use(express.session({
  secret: 'superSecretKey',
  cookie: {maxAge: 3600000*24*14},
  store: new MongoStore({
    mongoose_connection: mongoose.connections[0],
    db: 'myDb'
  })
}));

我怎样才能实现我想要的? 谢谢!

【问题讨论】:

  • 请参阅this answer,了解如何实现这一目标。除此之外,maxAge 应该设置为会话到期的未来毫秒数,而不是日期(这就是 expires 的用途)。所以使用这个:maxAge : 3600000*24*14 将到期时间设置为两周。
  • 谢谢!我还在github.com/senchalabs/connect/issues/670 上找到了这个。是的,我总是混淆 expires 和 maxAge,我编辑了问题并发布了答案

标签: node.js mongodb session cookies express


【解决方案1】:

我终于解决了,你必须使用中间件来更新会话中的任何数据,以便重新发送 cookie,就像这样:

app.use(function(req, res, next) {
  req.session._garbage = Date();
  req.session.touch();
  next();
});

这样,maxAge 将在每次向应用发出请求时更新 cookie 和会话。

【讨论】:

  • 我想做类似的事情,但要说 2 个小时。我是否只需像您原来的问题一样设置maxAge,然后将这个app.use 放入配置中?
  • req.session.regenerate(callback) 对你不起作用?
猜你喜欢
  • 1970-01-01
  • 2018-03-30
  • 2020-04-08
  • 1970-01-01
  • 2016-11-30
  • 2018-12-13
  • 2017-06-20
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多