Приложение Facebook работает во всех браузерах, но не IE8

Я пытается развивать приложение 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, но я не уверен, как исправить этот вопрос.

2 ответов


попробуйте добавить этот заголовок поверх файла php:

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

это сделает междоменные вызовы AJAX работать в IE

EDIT:

на самом деле длинный правильный ответ следующий:

при разработке приложения iframe Canvas (или любого другого iframe, размещенного на странице из другого домена) доступ к cookies (известным как сторонние cookies) ограничен при некоторых условиях (конфигурация IE по умолчанию). Firefox, Chrome, Safari, опера все работайте, как ожидалось, но IE блокирует доступ к этим cookies. Наличие этого заголовка (который называется P3P Compact Политика конфиденциальности) заставит IE принимать куки из разных доменов.

и как это делает ваш код сеанса работать???

ну, чтобы сохранить информацию о сеансе на сервере, страница выдает файл cookie сеанса, который хранится в клиенте. Если ваш iframe использует сеанс, то он должен быть разрешен браузером для хранения печенье.

падение для хранения cookie означает, что сеанс будет потерян, и ваш код на основе сеанса не удастся, как вы опубликовали.

надеюсь, что это помогает.

PS: Кстати, я понятия не имею, что означают все странные аббревиатуры в заголовке p3p. Я видел много вариантов его работы, поэтому вы должны попытаться исследовать немного больше об этом


Если вы работаете на платформе Microsoft .net, вы можете установить заголовки P3P в IIS.

см. следующую ссылку, но вы можете пропустить дерьмо о необходимости иметь XML-файл политики и перейти прямо к добавлению заголовка!

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