【问题标题】:In Express the Session Cookie Expires Too Early在 Express 中,会话 Cookie 过早过期
【发布时间】:2013-12-26 15:04:06
【问题描述】:

我可能只是不明白 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 天内活跃一次。

一如既往,非常感谢您的帮助!

【问题讨论】:

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


    【解决方案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来存储session。例如connect-mongo,它支持TTL和replica set。 https://github.com/kcbanner/connect-mongo

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 2011-07-24
      • 2015-02-22
      • 1970-01-01
      • 2012-08-03
      • 2020-10-18
      • 1970-01-01
      相关资源
      最近更新 更多