我已经建立了一个基于这些原则的持久登录应用程序(来自:http: //jaspan.com/improved_persistent_login_cookie_best_practice)
- 当用户在选中记住我的情况下成功登录时,除了标准会话管理 cookie 之外,还会发出一个登录 cookie。[2]
- 登录 cookie 包含用户的用户名、系列标识符和令牌。系列和令牌是来自适当大空间的不可猜测的随机数。这三者一起存储在数据库表中。
- 当未登录用户访问该站点并显示登录 cookie 时,会在数据库中查找用户名、系列和令牌。
- 如果存在三元组,则认为用户已通过身份验证。使用的令牌将从数据库中删除。生成一个新令牌,并使用用户名和相同的系列标识符存储在数据库中,并向用户发出一个包含所有三个的新登录 cookie。
- 如果存在用户名和系列但令牌不匹配,则假定为盗窃。用户会收到措辞强硬的警告,并且用户记住的所有会话都将被删除。
- 如果用户名和系列不存在,则忽略登录 cookie。
我了解在初始身份验证成功后我重新颁发了一个新令牌。但是,我是否会在其他需要身份验证的页面上重新发出新令牌,并继续检查该持久性 cookie。
还是在初始成功身份验证后,将用户标记为已登录,并且仅从该点开始通过会话进行身份验证,并保存初始重新发布的 cookie,以供当前会话到期后用户尝试访问该站点时使用(即关闭浏览器等)?