我有简单的PHP应用程序,它适用于除IE8 beta 2之外的所有浏览器,当我尝试使用Ajax调用(jQuery post方法)更新表字段时出现问题.使用IE8调试器我发现IE8不发送会话cookie,因此php脚本重定向到登录页面而不是执行请求的操作.
我能做些什么来完成这项工作.
编辑:我没有提到我正在使用Code Igniter,所以我通过将Code Igniter默认会话实现替换为本机问题解决了这个问题.代码点火器默认会话实现使用cookie来存储所有数据.
昨天我有类似的问题,并找到了解决方案.我希望这也能帮助别人.
问题:假设有一个网站www.somewebsite.com和IFRAME,它从我的服务器www.myserver.com/welcome.php加载php文件.网站加载成功以及我的欢迎页面,它显示类似"Hello Bob"的内容,因此它成功找到了用户并登录了他.
之后我的JavaScript正在对另一个PHP文件进行AJAX调用,并且响应处于"未授权"状态,因此SESSION数据完全丢失.页面刷新后,一切正常.而这只发生在IE8下!
我认为问题在于将会话cookie发送到服务器,但是当我安装Fiddler时,我发现IE8正在正确地发送cookie和PHPSESSID,但服务器有点无法检测到正确的SESSION对象.另一个奇怪的事情是第二次服务器发送了以下标题:
P3P:CP ="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
但第一次没有.在PHP脚本中手动添加该标题后,一切都像魅力一样!
然后,当我用Google搜索"p3p abracadabra"时,我发现了以下网站:
http://adamyoung.net/IE-Blocking-iFrame-Cookies
结论:确保在每个设置cookie的页面上发送标题.
而且这不仅与IE8 + PHP组合有关,在IE8 + ASP.NET,IE8 + JSP等情况下也会出现同样的问题.
我自己没有IE8,但是您的cookie可能会被Internet Explorer的奇怪安全策略阻止.可能的解决方法是使用P3P(这也是在IFRAME中使用cookie的方法).
生成正确的P3P策略可能有点工作,但您应该能够在http://www.p3ptoolbox.org/找到所需的信息.