我的Facebook画布iframe应用程序存在问题。
我正在使用会话来构建一个简单的问卷式应用程序。每个页面都有一个问题,当提交表单时,答案存储在会话数组中,页码加1,然后显示下一个问题。简单的东西。
然而,这个应用程序;适用于除Internet Explorer之外的所有浏览器。
在Internet Explorer中,在页面更改时,它似乎会经历另一个页面更改,从而使会话无效,并重新开始。我进行了搜索和搜索,但似乎无法找到这种行为的原因。
我已将应用的源代码放在http://gist.github.com/613083。该应用程序使用Facebook提供的标准PHP SDK http://www.github.com/facebook/php-sdk。
答案 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的唯一方法是。
所以我的解决方案是:
从现在开始(直到第一个cookie在客户端上),即使您托管在iframe中,也可以使用会话和Cookie,因为您的应用程序现在已受信任。
我在不使用P3P的情况下成功解决了这个问题。