Facebook应用程序适用于所有浏览器,但不适用于IE8
我开发了一个Facebook应用程序。简单地说,这款应用在大多数浏览器上都能正常工作(我在FF,Chrome和Safari上测试过它,并且它们在所有浏览器上运行良好)。然而,当我在IE8测试,我在试图让一个AJAX调用的一个页面时,此错误消息:Facebook应用程序适用于所有浏览器,但不适用于IE8
Fatal error: Uncaught Exception: 102: Requires user session thrown in
/home1/website/public_html/facebook/src/facebook.php on line 515
这比包含行515 facebook.php
功能:
protected function _restserver($params) {
// generic application level parameters
$params['api_key'] = $this->getAppId();
$params['format'] = 'json-strings';
$result = json_decode($this->_oauthRequest(
$this->getApiUrl($params['method']),
$params
), true);
// results are returned, errors are thrown
if (is_array($result) && isset($result['error_code'])) {
throw new FacebookApiException($result);
}
return $result;
}
我的猜测是,这是要做的会议或与IE8设置,但我不知道如何解决这个问题。
尝试在你的PHP文件的顶部添加此标题:
<?php
header('p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"');
?>
这将使跨域AJAX在IE调用工作
编辑:
其实从长远正确答案如下:
当开发一个IFrame Canvas应用程序(或任何其他iframe托管在页面中的一个difer ent域名)访问cookie(称为第三方cookie)在某些条件下(默认IE配置)受到限制。 Firefox,Chrome,Safari,Opera均可按预期工作,但IE会阻止访问此Cookie。这个头的存在(称为P3P Compact Privacy Policy)将使IE接受来自不同域的Cookie。
这是如何让你的会话代码工作?
那么为了维护服务器中的会话信息,页面会发布一个存储在客户端的会话cookie。如果您的iframe使用会话,则必须允许浏览器存储cookie。
落入存储cookie意味着会话将丢失,基于会话的代码将失败,如您发布的。
希望这会有所帮助。
PS:顺便说一句我不知道p3p头文件中所有奇怪的缩略语是什么意思。我已经看到它的许多变体的工作,所以你应该尝试调查一下更多关于它
如果您运行在Microsoft .net平台上,您可以在IIS中设置P3P标头。
看到下面的链接,但你可以跳过关于必须有一个政策的XML文件,并直接删除头添加!
我只想告诫人们不要认为添加P3P标题可以解决所有Cookie问题。它将围绕IE中的常见场景开展工作,但如果明确禁用第三方cookie(通过浏览器安全设置或通过附加cookie管理器),则P3P标头的存在不会有任何区别。通过在iframe应用程序中使用cookie,您总会在这里和那里丢失一些用户。希望不多,但总是一些。如果这是不可接受的,请不要使用cookies。 – 2011-09-13 08:59:29
哇。这当然是一条神奇的路线。它工作完美(我不得不关闭并打开IE8刷新Ajax消息)。这条线是做什么的? – khr2003 2010-12-17 03:43:32
我会编辑我的答案以解释它的作用 – 2010-12-17 04:42:17
非常感谢您的解释。我做了一些研究,这里是解释奇怪缩写词的链接:http://www.p3pwriter.com/LRN_111.asp – khr2003 2010-12-17 07:44:14