坚持"记住我"饼干的竞争条件

Chr*_*vén 6 authentication cookies login race-condition

根据持久登录Cookie最佳实践,您不应该允许多次使用"记住我"令牌:

持久性cookie适用于单次登录.确认身份验证后,用于登录的随机数将失效,并分配一个全新的cookie.标准会话管理处理会话生命周期的凭证,因此在下一个会话之前不会检查新分配的cookie(此时它也将在使用后失效).

那么,您如何处理用户同时访问您网站上多个网址的竞争条件?我现在实际上遇到了这个问题.

假设两个请求同时从浏览器发送到服务器.请求不包含会话cookie,但包含相同的"记住我"cookie.其中一个请求将在另一个之前处理,并将获得带有经过身份验证的会话cookie和重新生成的"记住我"cookie的响应.

现在,第二个请求中的"记住我"标记无效,并在服务器上生成另一个会话ID.此请求失败,因为无法对用户进行身份验证.

我想出了一些可能的解决方案,但它们似乎都不是很好.我错过了什么吗?

van*_*goz 2

老问题,但我没有在任何地方找到答案。我有同样的问题。我的解决方案是将旧令牌存储在数据库中,并在找不到主令牌时将其用作后备。但我确保旧令牌仅在短时间内有效,例如令牌更改后的几秒钟。然后我只在上次更新后经过一段时间后才更改令牌,否则会出现令牌连续更改几次的情况。