gpt4 book ai didi

php - PHP 如何将原始 cookie 解析为 $_COOKIE?

转载 作者:可可西里 更新时间:2023-11-01 12:22:04 27 4
gpt4 key购买 nike

我遇到跨域 AJAX 请求的问题。

此问题涉及三台服务器。我们可以称它们为 A1A2B

A1A2 运行相同的应用程序代码。它们是同一 Web 应用程序的两个暂存实例。 B 是另一个网络应用程序。

我们需要执行从A web 应用程序到B 应用程序的跨域AJAX 请求。我们尝试启用 CORS,但很难让它在 IE <= 8 中令人满意地工作,所以现在我们正在使用 nginx 代理规则。因此,流程是:浏览器 ajax 请求 -> A1A2 -> nginx 代理 -> B

B 是有状态的,需要用户的 session cookie 才能运行。

我们看到的是,当使用服务器 A1 时,它可以正常工作,但是当使用服务器 A2 时,B 无法拉取出 cookies 。

我查看了来自A1A2 的请求的 header ,它们是相同的。两者在标题中都有 cookies 行,两者具有相同的来源等。

B 上,我们看到当请求来自 A2 时 $_COOKIE['session_key'] 为空,但当请求来自 时正确填写>A1

奇怪的是,它只缺少从 header 中的 cookie 中提取一个特定的 cookie key ,并且仅当请求来自 A2 时。它可以很好地解析来自 A2 的 header 中的所有其他 cookie,只是由于某种原因无法解析用户的 session cookie,但如果请求来自 A1,它就可以了.

我已经使用了 tcpdump 并获取了其中每一个的 pcaps 并对它们进行了比较, header 中没有任何内容看起来特别不同。

我发现了这个 Stack Overflow 问题,人们说这是因为他的 cookie header 字符串太长:What could cause cookie to not be set in $_COOKIE when it's in $_SERVER我不认为这太长,因为我的只有 249 个字符长,无论是成功的还是失败的。

我正在考虑从 $_SERVER 中提取 cookie 并手动解析它们,但这听起来真的很愚蠢,我更愿意找出潜在的问题。

最佳答案

使用 IE<=8 时的一个问题是 P3P .我发现将 P3P header 放入接受您的 AJAX/JSON 请求的页面(您的实例中的服务器 B)将解决此问题:

header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');

至于服务器A2不向服务器B发送$_COOKIE请求,我建议使用_GET发送请求code> 到 server B 上的某种 init 页面。这样它就可以被处理,并存储在服务器B上。然后对于所有必须存在此信息的剩余页面,您可以查看服务器B以确定信息是否已发送,或者不断向每个页面发送_GET数据并将其与手头已有的信息进行比较。提醒一下,应该严格监控此信息,因为它更容易修改。

抱歉,我知道这不能解决问题,但可以提供替代解决方案。

关于php - PHP 如何将原始 cookie 解析为 $_COOKIE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14629953/

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