2010-10-06 7 views
14

У меня проблема с моим фреймворком iframe в Facebook.Facebook iframe не работает в IE; проблема сеанса/входа?

Я использую сеансы для создания простого приложения в стиле анкеты. На каждой странице есть вопрос, когда форма отправляется, ответ хранится в массиве сеанса, а номер страницы увеличивается на единицу, а затем отображает следующий вопрос. Простые вещи.

Это приложение, однако; работает в каждом браузере, кроме Internet Explorer.

В обозревателе Internet Explorer при изменении страницы происходит перемена другой страницы, которая отменяет сеанс и запускается заново. Я искал и искал, но не мог найти причину такого поведения.

Я разместил исходный код приложения по адресу http://gist.github.com/613083. Приложение использует стандартный PHP SDK, предоставленный Facebook, по адресу http://www.github.com/facebook/php-sdk.

ответ

33

Возможно, у вас возникла проблема с файлом cookie третьей стороны. Если вы попали в цикл перенаправления, это, вероятно, так.

решение в PHP, добавьте это:

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); 

Это очистило его прямо на меня. У меня была неприятная проблема с перенаправлением.

Это позволяет использовать файлы cookie с перекрестными доменами для страницы, так как cookie устанавливается для Facebook вашим iFrame IE, и вам должно быть сказано, что все в порядке.

+1

Это сработало. Но я ненавижу, зная, что я понятия не имею, что это действительно делает или о чем. Может ли кто-нибудь уточнить? Справочный сайт Facebook P3P (http://fb.me/p3p) мне вообще не помог. –

+0

На самом деле, он исправил проблему в IE9 в Windows 7, но не IE8 в Windows XP. Есть ли объяснение этому? –

+0

Nevermind, он работает и в IE8. У меня была ошибка, отправляющая не совсем правильный заголовок. –

2

Цитируя http://adamyoung.net/IE-Blocking-iFrame-Cookies

«Проблема заключается стандартом W3C под названием Платформа Privacy Preferences или P3P для краткости. Вы можете прочитать все о скучных вещах по ссылке, или просто установить заголовок P3P Policy Compact ниже Это позволит Internet Explorer принять ваш сторонний файл cookie. Вам нужно будет отправить заголовок на каждую страницу, на которой установлен cookie ».

0

Предлагаю другой подход к этой проблеме, без использования заголовков P3P или другого нечетного материала. Проблемы возникают из-за того, что два приложения размещаются в разных доменах. В частности, когда вашему приложению нужно начать сеанс или сохранить файл cookie на клиенте, любые файлы cookie или сеансы, которые вы установили, будут считаться «сторонними». Единственный способ, с помощью которого вы можете успешно установить сеансы или файлы cookie, - , если ваши пользователи ранее посетили ваш домен.

Так что мое решение:

  • хостинг приложений вместо того чтобы показывать страницу с IFRAME, она ранее вызовы приложения с конкретным URL (например: www.yourappsite.com/customer=9rUwkNmawUELbB2).
  • приложение проверяет маркер и проверяет, является ли он действительным (этот шаг только тогда, когда вам нужно различать среди различных клиентов)
  • если все в порядке, устанавливает куки на клиенте (вы можете сделать это, потому что ваше приложение в не еще в iframe)
  • затем перенаправляет пользователя на исходный URL (тот, у которого есть iframe, который вызывает ваше приложение снова).

С этого момента (пока первый клиент cookie не находится на клиенте) вы можете использовать сеансы и файлы cookie, даже если вы размещены в iframe, потому что теперь вашему приложению доверяют.

Я успешно решил проблему, не используя P3P.

+0

Этот вопрос был задан - и ответил - почти четыре года назад. –

+1

Да, но это актуальный вопрос. Кто-то может столкнуться с этой проблемой и сегодня. –

+0

Приложения Facebook, похоже, больше не страдают от этой проблемы. –

Смежные вопросы