Facebook iframe无法在IE中工作;会话/登录问题?

时间:2010-10-06 09:38:41

标签: php session cookies facebook

我的Facebook画布iframe应用程序存在问题。

我正在使用会话来构建一个简单的问卷式应用程序。每个页面都有一个问题,当提交表单时,答案存储在会话数组中,页码加1,然后显示下一个问题。简单的东西。

然而,这个应用程序;适用于除Internet Explorer之外的所有浏览器。

在Internet Explorer中,在页面更改时,它似乎会经历另一个页面更改,从而使会话无效,并重新开始。我进行了搜索和搜索,但似乎无法找到这种行为的原因。

我已将应用的源代码放在http://gist.github.com/613083。该应用程序使用Facebook提供的标准PHP SDK http://www.github.com/facebook/php-sdk

3 个答案:

答案 0 :(得分:33)

您可能遇到第三方Cookie问题。如果你陷入重定向循环,情况可能就是这样。

php中的解决方案,添加:

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

这清除了它对我来说。我有一个讨厌的重定向问题。

这允许跨域cookie用于页面,因为你的iFrame IE为Facebook设置了cookie必须被告知它没问题。

答案 1 :(得分:2)

引自http://adamyoung.net/IE-Blocking-iFrame-Cookies

“问题在于W3C标准称为隐私首选项平台或简称P3P。您可以通过链接阅读所有有关无聊的内容,或者只是在下面安装P3P Compact Policy标题。这将允许Internet Explorer接受您的第三方Cookie。您需要在设置Cookie的每个页面上发送标题。“

答案 2 :(得分:0)

我建议使用不同的方法解决这个问题,而不使用P3P标头或其他奇怪的东西。出现问题的原因是两个应用程序托管在不同的域上。特别是,当您的应用程序需要启动会话或在客户端上保存cookie时,您设置的任何cookie或会话都将被视为“第三方”。如果您的用户之前访问过您的域,则您可以成功设置会话或Cookie的唯一方法是

所以我的解决方案是:

  • 托管应用程序,而不是显示带有iframe的页面,它先前使用特定的URL调用您的应用程序(例如:www.yourappsite.com/customer=9rUwkNmawUELbB2)。
  • 您的应用程序检查令牌并验证它是否有效(仅当您需要区分不同的客户时才执行此步骤)
  • 如果可以的话,在客户端设置一个cookie(你可以这样做,因为你的应用程序在不是还在iframe中)
  • 然后将用户重定向到原始网址(具有再次调用您应用的iframe的网址)。

从现在开始(直到第一个cookie在客户端上),即使您托管在iframe中,也可以使用会话和Cookie,因为您的应用程序现在已受信任。

我在不使用P3P的情况下成功解决了这个问题。