gpt4 book ai didi

php - session_regenerate_id() 在 IE11/Edge 中不起作用

转载 作者:搜寻专家 更新时间:2023-10-31 21:24:04 25 4
gpt4 key购买 nike

我有标准的身份验证情况...访客填写登录名+密码以形成表单,php 脚本在数据库中对其进行身份验证并重定向回某个页面。

在这个过程中,我们只是在重定向之前客户成功通过身份验证时添加 session_regenerate_id(true)。在 Chrome 中一切正常,但在某些版本(不是全部)的 IE11 和最新版本的 Edge 中不起作用(在虚拟框中试用 - 从 modern.ie 下载)。也许它在其他一些浏览器中不起作用。

它在 Chrome 中是如何工作的:

  • 带有登录表单的客户端加载页面 - 他的 session ID 为 AAA
  • 客户端发送表单 - 请求的 session ID AAA
  • 正在对客户端进行身份验证 - 已调用 session_regenerate_id(true)
  • 响应有 Set-cookie 和 session ID BBB(+位置:YYY)
  • 浏览器向 YYY 发送 session ID BBB 的请求
  • response 没有 set-cookie,所以 session id 是 BBB
  • 客户端已通过身份验证

它在 IE11/Edge 中如何工作:

  • 带有登录表单的客户端加载页面 - 他的 session ID 为 AAA
  • 客户端发送表单 - 请求的 session ID AAA
  • 正在对客户端进行身份验证 - 已调用 session_regenerate_id(true)
  • 响应有 Set-cookie 和 session ID BBB(+位置:YYY)
  • 浏览器使用 session ID AAA 向 YYY 发出请求
  • response 没有 set-cookie,所以 session id 是 AAA
  • 客户端通过身份验证

问题是,在重新生成 session ID 时删除了 session AAA,因此无法对客户端进行身份验证。

它甚至在没有 Location header 时也不起作用,只显示带有其他页面链接的静态页面。

看起来,浏览器似乎忽略了 Set-cookie。

当我删除 session_regenerate_id() 时,它“有效”,但它不太安全。

最佳答案

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

示例:www.site.com

Chrome:工作正常,从当前 url (www.site.com) 获取域Edge:不知道如何,但是新的 session ID 保存到域 site.com

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

关于php - session_regenerate_id() 在 IE11/Edge 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40169160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com