Приложение Facebook работает на всех браузерах, но не на IE8 - PullRequest
7 голосов
/ 17 декабря 2010

Я разрабатываю приложение для 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

Эта функция содержит строку 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 ]

22 голосов
/ 17 декабря 2010

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

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

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

РЕДАКТИРОВАТЬ:

На самом деле длинный правильный ответ таков:

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

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

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

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

Надеюсь, это поможет.

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

0 голосов
/ 13 сентября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...