ash*_*ies 9 php cookies session-cookies
我有跨域AJAX请求的问题.
此问题涉及三台服务器.我们可以称他们为A1,A2,和乙.
A1和A2运行相同的应用程序代码.它们是同一Web应用程序的两个临时实例.B是另一个Web应用程序.
我们需要从A Web应用程序到B应用程序执行跨域AJAX请求.我们尝试启用CORS但很难在IE <= 8中令人满意地工作,所以现在我们使用的是nginx代理规则.因此流程是:浏览器ajax请求 - > A1或A2 - > nginx代理 - > B.
B是有状态的,需要用户的会话cookie才能运行.
我们看到的是,这在使用服务器A1时正常工作,但在使用服务器A2时,B无法提取cookie.
我查看了来自A1和A2的请求的标题,它们是相同的.两者都在标题中有cookie行,两者都有相同的来源等.
在B上我们看到$ _COOKIE ['session_key']在请求来自A2时为空,但在请求来自A1时正确填写.
奇怪的是,它只是缺少从标题中的cookie中拉出一个特定的cookie密钥,并且仅在请求来自A2时.它解析了A2中标题中的所有其他cookie ,它只是因为某些原因无法解析用户的会话cookie,但如果请求来自A1,它就可以了.
我已经使用了tcpdump并取了每个的pcaps并将它们区分开来,标题中没有任何内容看起来特别不同.
我发现这个Stack Overflow问题并且人们说这是因为他的cookie标题字符串太长了:什么可能导致cookie没有设置在$ _COOKIE中,当它在$ _SERVER时我不认为太长,因为我的只有249个字符在成功和失败的情况下都是如此.
我正在考虑从$ _SERVER中删除cookie并手动解析它们,但这听起来真的很愚蠢,我更愿意找出潜在的问题.
PHP 并没有错。
我们使用 Kohana,它在初始化时运行一些代码来尝试为会话 cookie 添加额外的安全性。相关代码验证服务器端会话中记录的 IP 地址是否与请求标头中发送的 IP 地址匹配。
由于我们的网络配置,我在联系服务器 B 时始终收到外部 IP,在联系 A2 时收到内部 IP,在联系 A1 时收到外部 IP。
当 A2 将带有内部 IP 的请求转发给 B 时,它触发了 Kohana 基于 IP 的 cookie 保护,因为 cookie 是使用我的外部 IP 创建的,但现在尝试由我的内部 IP 使用。
| 归档时间: |
|
| 查看次数: |
1051 次 |
| 最近记录: |