我该怎么做才能使其正常工作呢?
编辑:我没有提到我正在使用Code Igniter,所以我通过将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正确地发送了cookies和PHPSESSID,但服务器无法检测到正确的SESSION对象。另一个奇怪的事情是,第二次服务器发送以下标头:
P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
但第一次不行。在PHP脚本中手动添加该标头后,一切都像魔术般地正常工作了!
然后,当我谷歌搜索“p3p abracadabra”时,我发现了以下网站:
http://adamyoung.net/IE-Blocking-iFrame-Cookies
结论:确保在设置cookie的每个页面上都发送头文件。我在IE8 RC1中遇到了同样的问题:
1)用户进入登录页面,并设置一个空的会话cookie
2)用户登录成功,已验证的会话cookie被设置,JavaScript打开了一个新窗口并关闭了当前窗口。
3)新窗口打开了,但包含一个空的会话cookie。
4)用户被重定向到登录页面
我将步骤1更改为不设置空cookie-只有在会话cookie经过验证后才发送。这个方法解决了我的问题。
我遇到了一些麻烦,无法让IE8使用SSL证书(PK12)文件作为授权手段。如果我想保护一个目录并强制要求匹配的Web证书在授予访问权限之前存在于浏览器中。它可以在IE7和所有版本的Mozilla上正常工作-但在IE8上不能。这使得我妻子的口述系统无用了。另外我注意到的一件事是,当它设置PHPSESSID cookie时,它将域列为.net而不是mydomain.net。