Как мне установить куки с внешних доменов внутри фреймов в Safari? - PullRequest
21 голосов
/ 05 октября 2008

От Apple Разработчик faq

Сафари корабли с консерватором политика cookie, которая ограничивает cookie пишет только на выбранные страницы ("перемещен в") пользователем.

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

Это означает, что если вы загружаете страницу со своего собственного сайта с помощью iFrame со страницей с другого сайта, то другой сайт не сможет устанавливать файлы cookie. (например, билетный магазин). Как только вы посетили другой домен напрямую, другой сайт может получить доступ и изменить свои собственные файлы cookie.

Не имея доступа к коду на другом сайте, как я могу сделать пользовательский интерфейс максимально незаметным?

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

Обновление:

Функция HTML5 'window.postmessage' кажется хорошим решением.
Существует несколько библиотек jQuery, которые могут помочь и совместимы с большинством последних браузеров.
По сути, документ iFrame отправляет сообщения вместе с Json через элемент окна.

Очень хороший Postmessage-плагин от daepark, с которым я начал работать.
и еще одно jQuery postMessage , автором которого был Бен Алман, я нашел, но не проверял.

Ответы [ 5 ]

10 голосов
/ 05 марта 2012

localStorage, поддерживаемый safari и всеми современными браузерами, разрешает операции чтения / записи даже на страницах, загруженных в iframe. если вы не против отказаться от поддержки ie6 и ie7, попробуйте использовать localStorage вместо файлов cookie на вашем веб-сайте. Я знаю, что ваш вопрос, в частности, говорит о том, что у вас нет доступа к коду на созданном сайте, но для тех, кто его имеет, localStorage определенно решает проблему «нет файлов cookie в фрейме сафари».

8 голосов
/ 23 июня 2009

Эта проблема известна как «Политика единого происхождения». По сути, это мера безопасности против создания лазеек в безопасности.

Если у вас есть iframe, который указывает на страницу в вашем собственном домене, JavaScript может получить доступ как к странице, на которой вы находитесь, так и к странице внутри Iframe. Это приемлемые отношения родитель-ребенок и ребенок-родитель.

 (parent doc)        (iframe doc)
    HTML --> IFRAME <-- HTML 
      ^--------|---------^

Однако, как только у вас есть файл, указывающий на внешнюю страницу, SOP вступает в игру и вызывает любую информацию, проходящую между родительской страницей и страницей iframe.

 (parent doc)        (iframe doc)
    HTML --> IFRAME <-- HTML 
               X

Прочтите этот пост о коммуникации iframe, это имеет большой смысл! Пост Stackoverflow

Эти ссылки тоже очень помогают!

1) Безопасная междоменная связь в браузере
2) wiki SOP или Политика аналогичного происхождения

Удачи!

3 голосов
/ 12 августа 2009

Эта страница предлагает вам разместить на своих страницах какой-нибудь javascript, который обнаруживает отсутствие всегда существующего cookie. Когда он обнаруживает, что cookie не был установлен, он отправляет необходимые данные сеанса на страницу, которая устанавливает cookie, и перенаправляет вас обратно на исходную страницу.

Очевидно, что POST достаточно для выполнения теста Safari «Я перешел в этот домен», поэтому с этого момента он принимает файлы cookie от этого домена.

Конечно, это не самый хороший код, но вполне может решить вашу проблему.

2 голосов
/ 23 октября 2010

Это общая проблема приложений Facebook, отображаемых в Safari. Многие (в том числе и я) справились с этим так, чтобы страница POST iframed сама себе. Когда на странице размещены данные формы, разрешается устанавливать файлы cookie. В конце концов, он работает с обновлением на 1 страницу, которое может быть даже POST вашего логина пользователя.

2 голосов
/ 17 августа 2009

Одно решение (немного грязное) может заключаться в том, чтобы родительская страница проверяла наличие cookie, а если cookie нет, запустите вызов AJAX для скрипта в домене страницы iframe, который устанавливает cookie.

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