Facebook / IE8 - 会话未被保存

5
我有一个Facebook iFrame应用程序(用PHP编写)在IE8中运行时,我的会话数据不会被保留。
我使用Symfony 1.4,并尝试了Symfony的会话包装器和$_SESSION。
我设置了两个测试页面:第一个页面定义了$_SESSION['foo'] = 'bar'并调用print_r($_SESSION)。第二个页面也调用print_r($_SESSION)。我看到我的会话变量在第一个页面上设置,但在第二个页面上没有设置。
一切在Firefox和Chrome中都运行良好,我让另外两个人在运行IE8的不同PC上进行测试,他们也遇到了同样的问题。
我尝试从我的页面中删除所有Facebook JavaScript,以为它可能会某种方式干扰,但那并没有解决任何问题。
非常感谢您的帮助!

2个回答

23

经过进一步研究,这是关于Facebook iframe应用和Internet Explorer的一个具体问题。幸运的是,解决方案非常简单,我只需要添加这行代码 header('P3P: CP="CAO PSA OUR"'); 一切都正常工作了!

编辑

经过更深入的研究,这个问题不仅限于Facebook,也适用于iframes。它与第三方cookie及Internet Explorer(和Safari)如何处理它们有关。我要注意的是,这个头部代码可以在IE上使用,但在Safari上不能。


1
我曾经遇到过同样的问题。PHP会话在IE8中无法持久化,但在其他浏览器(Chrome、Firefox、Opera、Safari)中可以。什么都没用。我尝试了从带有P3P指令的适当标头、cookie操作、重置会话ID、将cookie设置为过期等等一切方法。
最终有效的方法是这个(我不知道为什么它有效),但这就是罪魁祸首...
经过数天的调试,我发现我的脚本中有一个图像标记,其中包含一个错误的src引用,就像这样:
<img src="">

换句话说,src引用为空/空白。这是我整个问题的罪魁祸首。我不知道为什么,但在输入实际图像位置后,问题得到了解决:
<img src="./images/myimage.gif">

在修正空的src引用后,一切都正常工作了,即使在IE8中也能正确设置PHP会话。信不信由你,这就是PHP会话未被设置的原因。

我仍然不知道为什么,但在此之后它可以正常工作。我将研究为什么会导致这样的问题。如果有人知道原因,请发布答案。

希望这能帮助到某些人。 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接