Facebook / IE8 - 会话没有被持久化

时间:2010-11-06 05:02:43

标签: internet-explorer facebook session

我有一个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 个答案:

答案 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会话未被设置的原因。

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

我希望这有助于某人。 : - )