我有一个使用 redis 作为 session 存储的 Node/Express 应用程序。
我对 session 到期的处理有疑问。
我希望在浏览器关闭之前有一个事件 session ,所以我没有设置 session 过期时间。
这样做 session cookie 工作正常,但我对 Redis 有疑问。
似乎存储在 Redis 数据库中的一对 Key/Value 永远不会过期。
如何正确处理这个问题?
有没有一种方法可以配置redis来销毁某个空闲时间存储的值?
还是在应用程序内部调用 connect-redis 时设置 TTL 更好?
应用程序内部 session 的实际配置:
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-session 结合使用,您可以使用 express-session 中的 touch() 方法来重置 TTL。因此,如果您在创建 session 时设置了 TTL,请在您不希望 session 过期的路由上执行类似这样的操作:
api.get("/someRoute/", (req, res) => {
req.session.touch();
// Whatever else you need to do
res.sendStatus(200);
}
假设客户端仍在访问您的 API,这将重置 Redis 上的 TTL 并防止 session 过期 - 我假设如果客户端与您的 API 交互的时间足够长,则意味着浏览器已关闭或以其他方式结束使用您的应用。
关于node.js - Node/Express with connect-redis,如何处理 session 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38721131/