node.js - 如何禁止通过 Express-session 存储的 session 的 TTL 刷新?

标签 node.js session cookies redis express-session

我有一些关于 session 处理的要求,但我无法执行其中的一个。

session 需要:

  1. 如果用户不活跃则在 30 分钟后过期
  2. 无论事件如何,都将在用户首次登录后的 8 小时内过期。

我能够配置第 1 项但不能配置第 2 项。每次用户浏览应用程序时,cookie 都会更新(时间 +30 分钟)并发送回浏览器,但同时 session 存储 TTL 也是刷新。最后一部分是我需要停止的。

我相信 TTL 刷新是作为 express-session 的一项功能实现的。 Session.touch() 由中间件调用,但是否有一个设置可以删除此操作?

堆栈: 用于 session 存储的 Node、express、express-session、connect-redis。

配置:

    app.use(session({
  store: new RedisStore({
    client: redis_client,
    ttl: 28800 // 8 hours
  }),
  secret: config.redis_session_secret,
  resave: false,
  saveUninitialized: false,
  cookie: {
    path: '/',
    httpOnly: true,
    secure: false,
    maxAge: 30 * 60 * 1000 //mins * seconds * milliseconds. session cookie will expire every 30 mins 
  }, 
  rolling: true
}));

最佳答案

我认为选项 2 不是快速 session 支持的功能。因此,您可以只向每个 session 添加一个属性,指示它开始的时间,然后每 10 分钟左右(可能在间隔计时器上),查询该属性早于 8 小时的所有 session ,并将它们从数据库。

您可以改为实现中间件来检查每个请求的 session 过期时间,并在发现 session 超过 8 小时时删除 session 。

您应该知道,实现此行为可能会导致用户在使用您的应用程序的过程中丢失他们的 session (这就是通常不以这种方式实现的原因)。

关于node.js - 如何禁止通过 Express-session 存储的 session 的 TTL 刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45571252/

相关文章:

javascript - NextJS 的部署策略建议

asp.net-mvc - 为什么我的 session 变量在构建 Controller 时不可用?

session - Magento 购物车 : Check for items empties cart

php - 如何使用带有 POST 和 Cookie 的 cURL 登录

security - 将加密的私钥保存在 cookie 中

node.js - 如何在服务器上建模推送通知

node.js - 更改 jade 总是需要 node.js 重新启动然后才能验证更改

java - 同一 IP 但不同端口上的两个服务器之间的 JSESSIONID 冲突

node.js - 通过 Gitolite 和 post-receive hook 部署 Node 应用程序

php - session_set_cookie_params 中的 "secure"参数