在Express中,会话Cookie过期

时间:2013-12-09 13:23:42

标签: node.js session cookies express session-cookies

我可能只是不明白Express如何管理会话,但是当我将会话设置为在7天后过期时,例如

app.configure(function () {
  app.set(express.static(__dirname + '/public'));
  app.use(express.bodyParser());
  app.use(express.cookieParser());
  app.use(express.session({
    expires: new Date(Date.now() + (60 * 60 * 24 * 7 * 1000)),
    secret: ''
  }));
});

当浏览会话结束时,cookie设置为过期,而不是指定的7天。

如果我更改上述代码,例如

app.configure(function () {
  app.set(express.static(__dirname + '/public'));
  app.use(express.bodyParser());
  app.use(express.cookieParser());
  app.use(express.session({
    cookie: {
      expires: new Date(Date.now() + (60 * 60 * 24 * 7 * 1000)),
    },
    secret: ''
  }));
});

Cookie设置为在7天内到期;这也会在7天内到期服务器上的会话吗?我原以为这两个是默认耦合的。

奖励积分;在生产中,会话将存储在Redis或类似的,但在开发过程中,我将它们存储在内存中。有没有办法可以看到这些数据来验证它何时设置为过期?

更多积分!默认情况下,会议不会“滚动”吗?我已经读过req.session.touch()会重置会话;这会重置会话cookie的TTL吗?如果没有,你会如何建议我'滚动'会话,例如

会话最初设置为7天。 在第3天,用户返回并且会话到期重置为此访问后的7天。 等

因此,只要用户在任何滚动的7天内活动一次,用户就可以进行永久会话。

与往常一样,非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

MemoryStore是默认设置,非常简单,不支持TTL。

source code

如果你想访问MemoryStore,就这样做:

var ms = new MemoryStore();
app.use(express.session({
   store: ms
   ...
}))'

ms.all(function (err, array_of_session) { 
   console.log(array_of_session);
});

您应该使用redis或mongo来存储会话。例如connect-mongo,它支持TTL和副本集。 https://github.com/kcbanner/connect-mongo

会话滚动? 不,你可以自己动手

读这个 https://github.com/senchalabs/connect/issues/670

相关问题