我有一些关于 session 处理的要求,但我无法执行其中的一个。
session 需要:
- 如果用户不活跃则在 30 分钟后过期
- 无论事件如何,都将在用户首次登录后的 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/