带有connect-redis的Node / Express,处理会话到期的方式

时间:2016-08-02 12:58:48

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

我有一个 Node / Express 应用程序,它使用 redis 作为会话存储。

我有一个关于会话到期的处理的问题。

我希望在浏览器关闭之前有一个活动会话,所以我没有设置会话到期时间。

这样做会话cookie工作正常,但我对Redis有疑问。

似乎Redis DB中存储的密钥/值永远不会过期。

如何正确处理这个问题?

有一种方法可以配置redis来销毁以某个空闲时间存储的值吗?

或者,当在应用程序内部调用connect-redis时,最好设置一个TTL吗?

应用程序内部会话的实际配置:

var session = require('express-session');
var RedisStore = require('connect-redis')(session);

app.use(session({
  store: new RedisStore({port:6379, host: 'localhost'}),
  secret: "my-secret-here",
  resave: false,
  saveUninitialized: true }));

2 个答案:

答案 0 :(得分:1)

将Redis与快速会话一起使用,您可以使用express-session中的touch()方法重置TTL。因此,如果您在创建会话时设置TTL,请在您不希望会话过期的路线上执行此类操作:

api.get("/someRoute/", (req, res) => {
  req.session.touch();

  // Whatever else you need to do
  res.sendStatus(200);
}

这将重置Redis上的TTL,并防止会话过期,假设客户端仍在使用您的API - 我假设如果客户端没有与您的API进行足够长时间的交互,则意味着浏览器已关闭或以其他方式使用您的应用完成。

答案 1 :(得分:1)

您可以在创建会话存储时指定ttl。 您可以在readme中找到更多选项。

app.use(session({
    store: new RedisStore(options),
    secret: 'keyboard cat',
    ttl : 20 // ttl is in seconds. From the readme.
}));