使用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. }));