PHP持久登录 - 我是否在每次页面身份验证后重新发出cookie?

时间:2012-09-25 19:13:34

标签: php authentication

我已经构建了一个基于这些原则构建的持久登录应用程序(来自:http://jaspan.com/improved_persistent_login_cookie_best_practice

  
      
  1. 当用户成功登录并选中记住我时,除标准会话管理cookie外还会发出登录cookie。[2]
  2.   
  3. 登录cookie包含用户的用户名,系列标识符和令牌。系列和令牌是来自适当大空间的不可取的随机数。这三个都存储在一个数据库表中。
  4.   
  5. 当未登录的用户访问该站点并显示登录cookie时,将在数据库中查找用户名,系列和令牌。
  6.   
  7. 如果存在三元组,则认为用户已通过身份验证。使用的令牌将从数据库中删除。生成一个新令牌,使用用户名和相同的系列标识符存储在数据库中,并向用户发出包含所有三个的新登录cookie。
  8.   
  9. 如果存在用户名和系列但令牌不匹配,则假定盗窃。用户收到强烈警告的警告,并删除所有用户记住的会话。
  10.   
  11. 如果用户名和系列不存在,则忽略登录cookie。
  12.   

我知道在初始身份验证成功后我会重新发出新令牌。但是,我会在其他要求身份验证的页面上重新发出新令牌,并继续检查该持久性cookie。

或者,在初始成功验证后,我会将用户标记为已登录,并且仅通过会话从该点进行身份验证,并保存该初始重新发布的Cookie,以便用户在当前会话后尝试访问该站点时到期(即关闭浏览器等)?

2 个答案:

答案 0 :(得分:0)

我会投票给第二个选项。如果不出意外,不断更新auth cookie会带来性能损失。 (小但仍然没必要)。成功登录后,写下cookie。一旦用户在站点中,只使用会话值。

答案 1 :(得分:0)

当用户尝试访问没有当前会话cookie的站点时,您只检查登录cookie。这就是我如何解释原则#3。

  

未登录用户访问该网站并提供登录Cookie时,   在数据库中查找用户名,系列和令牌。

(强调我的。)

另外,从逻辑上考虑,如果您要在每个页面加载上检查并重新发布登录cookie,那么同时使用会话cookie和登录cookie是毫无意义的。