Facebook iframe не работает в IE; сеанс / логин? - PullRequest
14 голосов
/ 06 октября 2010

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

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

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

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

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

Ответы [ 3 ]

33 голосов
/ 18 октября 2010

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

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

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

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

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

2 голосов
/ 27 января 2012

Цитирование из http://adamyoung.net/IE-Blocking-iFrame-Cookies

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

0 голосов
/ 22 июня 2014

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

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

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

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

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

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