【发布时间】:2021-12-04 17:47:09
【问题描述】:
我使用express-session、connect-redis 和ioredis 来存储会话,并且用户将redis 密钥存储在浏览器cookie 中。 每次与服务器交互时,connect-redis 都会重置 TTL,这意味着现在使用默认设置,内存中的会话将在用户与网站交互时的某个时间点超过浏览器 cookie。我想保持用户会话处于活动状态,而不是向用户显示一个弹出窗口,指定他们应该重新进行身份验证或者他们将很快注销或类似的东西。 YouTube 和 Facebook 等大型网站如何保持用户会话活跃?我认为多年来我从未经历过突然需要在 youtube 上重新进行身份验证。所以我的问题是如何处理 cookie 会话到期日期,强调良好的用户体验,而不是牺牲安全性?
我目前的想法是简单地检查何时有一定的时间等于 cookie 过期之前的剩余时间,如果结果是真的并且用户刚刚与网站进行了交互,则重置 maxAge cookie 上的属性。这样,如果用户不打算与网站交互超过一定的时间,比如 3 个月,而 cookie 到期前的时间正好是 3 个月,那么用户将在下一次登出用户在这 3 个月后访问该网站的时间。换句话说,只要用户在不到 3 个月的时间间隔内继续在网站上做某事,那么他们将始终保持登录和身份验证。你怎么看?我也可以将rolling property 设置为true,但由于性能原因,我不想在每个经过身份验证的请求中发送会话cookie。此外,由于我将 httpOnly 设置为 true,因此我无法写入 cookie 以尝试使用客户端 Javascript 增加其到期日期。
【问题讨论】:
标签: express authentication redis session-cookies express-session