我正在开发一个 Facebook 应用程序。 Stragnly,该应用程序在大多数浏览器上运行良好(我在 FF、chrome 和 safari 上测试过它,并且在所有浏览器上运行良好)。然而,当我在 IE8 上测试时,在尝试对其中一个页面进行 ajax 调用时收到此错误消息:
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 中工作
EDIT:
实际上,长的正确答案如下:
开发 IFrame Canvas 应用程序(或来自不同域的页面中托管的任何其他 iframe)时,在某些条件(默认 IE 配置)下,对 cookie(称为第 3 方 cookie)的访问受到限制。 Firefox、Chrome、Safari、Opera 都按预期工作,但 IE 阻止对此 cookie 的访问。此标头的存在(称为P3P 紧凑型隐私政策)将使 IT 接受来自不同域的 cookie。
这如何使你的会话代码工作???
为了在服务器中维护会话信息,页面会发出一个存储在客户端中的会话 cookie。如果您的 iframe 使用会话,那么浏览器必须允许它存储 cookie。
失败存储 cookie 意味着会话将丢失,并且基于会话的代码将像您发布的那样失败。
希望这可以帮助。
PS:顺便说一句,我不知道 p3p 标头中所有奇怪的缩写词是什么意思。我已经看到了它的许多变体,所以你应该尝试更多地研究它
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)