【问题标题】:Facebook app works on all browsers but not IE8Facebook 应用适用于所有浏览器,但不适用于 IE8
【发布时间】:2011-05-26 22:09:30
【问题描述】:

我正在开发一个 Facebook 应用程序。奇怪的是,该应用程序在大多数浏览器上都能正常运行(我在 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

这是在facebook.php中包含第515行的函数:

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 设置有关,但我不确定如何解决此问题。

【问题讨论】:

    标签: facebook session cross-browser


    【解决方案1】:

    尝试在您的 php 文件顶部添加此标头:

    <?php
        header('p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"');
    ?> 
    

    这将使跨域 AJAX 调用在 IE 中工作

    编辑:

    其实长的正确答案如下:

    在开发 IFrame Canvas 应用程序(或托管在来自不同域的页面中的任何其他 iframe)时,在某些情况下(默认 IE 配置)会限制对 cookie(称为 3rd 方 cookie)的访问。 Firefox、Chrome、Safari、Opera 都按预期工作,但 IE 阻止访问此 cookie。此标头(称为P3P Compact Privacy Policy)的存在将使 IE 接受来自不同域的 cookie。

    这如何使您的会话代码工作???

    为了在服务器中维护会话信息,页面发出一个会话 cookie,该 cookie 存储在客户端中。如果您的 iframe 使用会话,则浏览器必须允许它存储 cookie。

    存储 cookie 意味着会话将丢失,并且您的基于会话的代码将像您发布的那样失败。

    希望这会有所帮助。

    PS:顺便说一句,我不知道 p3p 标头中所有奇怪的首字母缩略词是什么意思。我已经看到它的许多变化,所以你应该尝试更多地调查它

    【讨论】:

    • 哇。这当然是一条神奇的线。它工作得很好(尽管我不得不关闭并打开 IE8 来刷新 Ajax 消息)。这条线有什么作用?
    • 非常感谢您的解释。我做了一些研究,这里是解释奇怪首字母缩写词的链接:p3pwriter.com/LRN_111.asp
    【解决方案2】:

    如果您在 Microsoft .net 平台上运行,您可以在 IIS 中设置 P3P 标头。

    请参阅以下链接,但您可以跳过关于必须拥有策略 XML 文件并直接添加标题的废话!

    http://support.microsoft.com/kb/324013

    【讨论】:

    • 我想提醒人们不要认为添加 P3P 标头可以解决所有 cookie 问题。它可以解决 IE 中的常见情况,但如果明确禁用第三方 cookie(通过浏览器安全设置或附加 cookie 管理器),则 P3P 标头的存在不会产生任何影响。通过在 iframe 应用程序中使用 cookie,您总是会在这里和那里失去一些用户。希望不是很多,但总是一些。如果这是不可接受的,请不要使用 cookie。
    猜你喜欢
    • 2020-08-26
    • 2020-02-22
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    相关资源
    最近更新 更多