我有标准的身份验证情况...访问者填写登录名+密码来形成,php脚本在数据库中对其进行身份验证,重定向回某个页面。session_regenerate_id()在IE11/Edge中不起作用
在这个过程中,当客户在重定向之前成功通过身份验证时,我们只添加session_regenerate_id(true)。在Chrome中一切正常,但它不适用于某些版本(并非全部)的IE11和最新版本的Edge(在虚拟框中试用 - 从modern.ie下载)。也许它在其他一些浏览器中不起作用。
它是如何在Chrome浏览器:与登录表单
- 客户端负载页面 - 他的会话ID AAA
- 客户端发送的形式 - 要求具有会话ID AAA
- 客户端进行认证 - session_regenerate_id(真)叫
- 响应具有设置cookie和session ID BBB(+地点:YYY)
- 浏览器发出的请求与会话ID YYY BBB
- 响应没有设置cookie的,所以会话ID为BBB
- 端进行身份验证
它是如何在IE11 /边工作:
- 客户端负载页面,登录表单 - 他有会话ID AAA
- 客户端发送的形式 - 要求具有会话ID AAA
- 客户端进行认证 - session_regenerate_id(TRUE)称为
- 响应具有设置cookie和session ID BBB(+地点:YYY)
- 浏览器发出的请求与会话ID YYY AAA
- 响应没有设置cookie的,所以会话ID是AAA
- 客户端不认证
问题是,该会话使用AAA再生会话ID的时候除去,所以客户端无法进行身份验证。
当没有位置标题时它甚至不起作用,只是显示带有到其他页面的链接的静态页面。
它看起来像浏览器忽略了Set-cookie。
当我删除session_regenerate_id(),它“工作”,芽不安全。
它究竟如何安全*? –
@FranzGleichmann - [会话修复](https://en.wikipedia.org/wiki/Session_fixation) – kluvi
没关系,在那里学到了新的东西。谢谢 –