在这个流行的持久登录 Cookie 解决方案中,涉及生成一个随机的 128 位“令牌”以保存在用户的 Cookie 中,Jens Roland 建议:
并且不要将持久登录 COOKIE(令牌)存储在您的数据库中,只存储它的哈希值!登录令牌是密码等效的,因此如果攻击者掌握了您的数据库,他/她可以使用这些令牌登录到任何帐户,就像它们是明文登录密码组合一样。因此,在存储持久登录令牌时使用强加盐哈希(bcrypt / phpass)。
但是,当 bcrypting Cookie Token 总是会产生不同的结果(因为 bcrypting 总是使用随机盐)时,如何检查 Cookie Token 与 DB 中的 bcrypted Token 以确认 Cookie 登录是有效的?
换句话说,您不能只对 Cookie 令牌进行 bcrypt 并在数据库中查找匹配项,因为您永远找不到匹配项,那么您如何根据推荐的解决方案将其与数据库中的散列版本进行实际匹配(“The服务器保留一个数字->用户名关联表,查找该表以验证 cookie 的有效性。”)?
编辑:
请记住,根据上面链接的推荐解决方案,单个用户可以为不同的设备拥有多个Cookie/令牌。我提到这是因为提交了一个答案(该答案已被删除),假设每个用户只有一个令牌。