Приложение 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-файл политики и перейти прямо к добавлению заголовка!