我有一个 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 }));
答案 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.
}));