如何禁止通过 Express-session 存储的会话的 TTL 刷新?

索米特拉·纳拉

我对会话处理有一些要求,但在执行时遇到了麻烦。

会话需要:

  1. 如果用户处于非活动状态,则在 30 分钟后过期
  2. 无论活动如何,都会在用户首次登录后的 8 小时内过期。

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

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

堆栈:用于会话存储的 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
}));
jfriend00

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

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

您应该意识到实施此行为可能会导致用户在使用您的应用程序的过程中丢失他们的会话(这就是它通常不会以这种方式实施的原因)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章