使用connect-redis的Node / Express,如何处理会话过期

我有一个使用Redis作为会话存储的Node / Express应用程序。

我有一个关于处理届会届满的问题。

我想有一个活动的会话,直到浏览器closures,所以我没有设置会话到期时间。

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

存储在Redis数据库中的夫妇密钥/值似乎永不过期。

如何正确处理这个问题?

有一种方法来configurationredis来销毁一定的空闲时间存储的值?

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


应用程序内的会话的实际configuration:

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

通过快速会话使用Redis,可以使用express会话中的touch()方法重置TTL。 所以,如果你在创build会话的时候设置了TTL,那么在你不希望会话过期的路由上做这样的事情:

 api.get("/someRoute/", (req, res) => { req.session.touch(); // Whatever else you need to do res.sendStatus(200); } 

这将重置Redis上的TTL,并防止会话过期,假设客户端仍然击中您的API – 我假设,如果客户端不足够长时间与您的API交互,这意味着浏览器已closures或以其他方式完成使用你的应用程序

您可以在创build会话存储时指定一个ttl。 您可以在自述文件中find更多选项。

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