Facebook iframe не работает в IE; проблема сеанса/входа?

У меня проблема с моим iframe-приложением в Facebook.

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

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

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

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

Ответ 1

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

Решение в php, добавьте это:

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

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

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

Ответ 2

Цитата из http://adamyoung.net/IE-Blocking-iFrame-Cookies

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

Ответ 3

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

Итак, мое решение:

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

Теперь (пока первый cookie не будет на клиенте) вы можете использовать сеансы и файлы cookie, даже если вы размещены в iframe, потому что теперь ваше приложение доверено.

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