node.js - Node/Express with connect-redis,如何处理 session 过期

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

我有一个使用 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/

相关文章:

mysql - 使用 sequelize 和 nodejs 更新多条记录?

node.js - 如何确保 Node.js 在 MongoDB 连接断开后继续运行?

php - Laravel - 通过作业类发送通知 - 将通知排队到 redis 队列而不发送两次

node.js - 在哪里运行 redis -sentinel

javascript - Node.JS deflate/gzip 响应文本

javascript - NodeJS 在 4 或 5 小时后变慢

node.js - 通过在 mongoose 中填充匹配结果来查找文档

node.js - 登录一个 Express 应用程序会破坏其他应用程序(同一服务器)中的 session

node.js - 去除图像文本nodejs中的噪声

redis - 当我使用HSET同时更新多个数据时。如果有些数据更新成功,有些数据更新失败?