2016-10-21 74 views
3

我有标准的身份验证情况...访问者填写登录名+密码来形成,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(),它“工作”,芽不安全。

+0

它究竟如何安全*? –

+0

@FranzGleichmann - [会话修复](https://en.wikipedia.org/wiki/Session_fixation) – kluvi

+0

没关系,在那里学到了新的东西。谢谢 –

回答

1

我自己回答我的问题... 问题是,Set-Cookie头不包含域。

例子:www.site.com

铬:工程确定,从目前的URL中获取域(www.site.com) 边缘:不知道怎么回事,但新的会话ID保存到域站点。com

解决方案:使用session_set_cookie_params()将域设置为“.site.com”(所有子域)。

相关问题