Intereting Posts

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

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

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

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

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

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

Solutions Collecting From Web of "Facebook iframe не работает в IE; проблема сеанса / входа?"

Возможно, у вас возникла проблема с файлом 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, и вам должно быть сказано, что все в порядке.

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

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

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

Поэтому мое решение:

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

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

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