重新生成PHP会话ID并双重刷新 - 浏览器未收到新cookie

时间:2013-07-11 11:54:55

标签: php codeigniter

我用我自己的原生会话实现替换了有点错误的CodeIgniter会话库。

两者都以相同的方式行事,并在一段时间后更改会话ID,并且都遇到同样的问题,为了这个问题,我们可以说会话每分钟重新生成一次。

当用户查看页面并等待一分钟时,在下一页请求中将重新生成会话ID。但是,当用户请求超时或者他们“双重刷新”页面时会出现问题。浏览器不会收到新cookie,因此会在下一个请求时启动新会话。因此,如果用户在重新生成ID的位置点击刷新并快速连续再次点击刷新,则会丢失会话。

我知道更改会话ID是防止会话固定的好主意但是有没有解决这个问题的方法?显然,增加ID重新生成的时间将限制发生这种情况的可能性,但似乎仍有可能发生。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  1. 将“previous_session_ID”列添加到您的数据库
  2. 将当前会话ID移至'previous_session_ID' - 然后生成新会话ID并将其存储在current_session_ID中
  3. 当用户尝试使用会话ID访问您的网页时 - 检查当前ID和'previous_session_ID'
  4. 问题解决了 - 他们现在可以进行“双重刷新”并仍然可以访问该页面。