我有简单的php应用程序,它适用于除IE8 beta 2之外的所有浏览器,当我尝试使用Ajax调用(jQuery post方法)更新表字段时出现问题。使用IE8调试器我发现IE8不发送会话cookie,因此php脚本重定向到登录页面而不是执行请求的操作。
我可以做些什么来完成这项工作。
编辑: 我没有提到我正在使用Code Igniter,所以我通过将Code Igniter默认会话实现替换为本机问题来解决这个问题。代码点火器默认会话实现使用cookie来存储所有数据。
答案 0 :(得分:8)
昨天我遇到了类似的问题并找到了解决方案。我希望这也能帮助别人。
问题:假设有一个网站 www.somewebsite.com ,其中包含IFRAME,从我的服务器加载php文件, www.myserver.com/welcome .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 等
答案 1 :(得分:5)
我自己没有IE8,但您的cookie可能会被Internet Explorer的奇怪安全策略阻止。可能的解决方法是使用P3P(这也是在IFRAME中使用Cookie的方法)。
生成正确的P3P政策可能有点工作,但您应该能够在http://www.p3ptoolbox.org/找到所需的信息
答案 2 :(得分:0)
我在IE8 RC1中遇到了同样的问题:
1)用户进入登录页面并设置空白会话cookie 2)用户登录并设置验证的会话cookie,javascript打开一个新窗口并关闭当前窗口 3)新窗口打开并包含空白会话cookie 4)用户被重定向到登录页面
我更改了第1步,因此未设置空白Cookie - 如果已经过验证,我只会发送会话Cookie。这解决了我的问题。
答案 3 :(得分:0)
我无法让IE8使用SSL证书(PK12)文件作为授权方式。如果我想保护目录并强制在授予访问权限之前在浏览器中显示匹配的Web证书。它适用于IE7和所有版本的Mozilla - 只是不是IE8。它使我妻子的听写系统变得毫无用处。我注意到的另一件事是,当它设置PHPSESSID cookie时,它将域列为.net而不是mydomain.net。
答案 4 :(得分:-3)
作为一种解决方法,您可以将SessionID作为参数嵌入到uri。
请参阅php手册中的passing session id。