某些时候,一个用户名可能对应多个随机数。另外,虽然不大可能,但即使有两个用户名对应同一个随机数也没什么关系。
一个持久化 cookie 被认证后,这个用来登录的随机数就失效了,并且需要分配一个新的 cookie (生成一个新的随机数, 并更新数据库里的记录)给用户。然后用标准的 session 管理机制来处理 session 的生命周期,而那个新设置的 cookie 直到这次 session 结束都不会再被检查。
服务器不需要特意防止一个以前用过的随机数被重新使用,这个几率非常小,即使发生了也没有人会知道可以利用它。
当用户通过退出功能退出后,他们当前 cookie 里的随机数也就失效了。用户也应该可以选择清除所有被系统记录的持久化登录。
数据库不定期的清理那些过期的记录(类似 session 的 gc 机制)。
下面这些功能不能允许通过 cookie 登录的用户使用:
最后
如果用户的登录 cookie 受到了攻击,攻击者就能以这个用户的身份来使用网站的功能。这是使用 cookie 无法避免的!尽管如此,攻击者应该不能: