我有标准认证情况...访客填写登录名+密码到表格,php脚本在数据库中验证它重定向回某页。
在此过程中,我们只需在重定向之前成功验证客户时添加session_regenerate_id(true)。 Chrome中的一切都运行良好,但它在IE11和最新版本的Edge(在虚拟框中试用 - 从modern.ie下载)的某些版本(不是全部)中不起作用。也许它在其他一些浏览器中不起作用。
它在Chrome中的运作方式:
在IE11 / Edge中如何运作:
问题是,在重新生成会话ID时会删除会话AAA,因此无法对客户端进行身份验证。
当没有Location标题时,它甚至不起作用,只显示带有其他页面链接的静态页面。
看起来,就像浏览器忽略了Set-cookie。
当我删除session_regenerate_id()时,它“有效”,使其安全性降低。
答案 0 :(得分:1)
我自己回答我的问题...... 问题是,Set-cookie标头不包含域。
示例:www.site.com
Chrome:运行正常,从当前网址获取域名(www.site.com) Edge:不知道如何,但新会话ID保存到域site.com
解决方案:使用session_set_cookie_params()将域设置为“.site.com”(所有子域)。