我有一个Facebook iFrame应用程序(用PHP编写),当我在IE8中运行时,我的会话数据不会持久存在。
我正在使用Symfony 1.4并尝试过Symfony的会话包装器和$ _SESSION。
我设置了两个测试页面:第一个定义$_SESSION['foo'] = 'bar'
并调用print_r($_SESSION)
。第二页也调用print_r($_SESSION)
。我看到我的会话变量在第一页上设置,但在第二页上没有。
Firefox和Chrome中的一切都运行正常,我还有另外两个人在运行IE8的不同PC上测试它们,他们遇到了同样的问题。
我尝试从我的页面删除任何Facebook javascript,认为它可能会以某种方式干扰,但这并没有解决任何问题。
非常感谢任何帮助,谢谢!
答案 0 :(得分:23)
经过一些研究,这是Facebook iframe应用程序和Internet Explorer的一个特定问题。幸运的是,解决方案非常简单,我只需要添加此代码header('P3P: CP="CAO PSA OUR"');
现在一切正常!
修改
经过更多的研究,这个问题并不是Facebook特有的,只有iframe。它与第三方cookie以及Internet Explorer(和Safari)如何处理它们有关。我想要注意,标题代码适用于IE,但不适用于Safari。
答案 1 :(得分:1)
我遇到了同样的问题。 PHP会话没有持久化IE8,但它们在其他所有浏览器中(Chrome,Firefox,Opera,Safari)。没有任何效果。我尝试了所有的东西,从正确的标题与P3P指令,cookie操作,重置会话ID,设置cookie到将来的过期方式,等等,等等,等等。
这是最终奏效的(我不知道它为什么会起作用),但这是罪魁祸首......
经过几天的调试后,我发现我的脚本中有一个图像标记,其中包含一个错误的src引用,如下所示:
<img src="">
换句话说,src引用为空/空白。这是对我的整个问题的谴责。我不知道为什么,但在输入这样的实际图像位置之后:
<img src="./images/myimage.gif">
在纠正空的src引用之后,一切正常,即使在IE8中也正确设置了PHP会话。不管你信不信,这就是PHP会话未被设置的原因。
我仍然不知道,但在此之后它运作良好。我将不得不研究为什么会导致这样的问题。如果有人知道原因,请发布答案。
我希望这有助于某人。 : - )