Установка междоменных cookie в Safari

Я должен назвать домен A.com (который устанавливает cookie с http) от домена B.com. Все, что я делаю на домене B.com, (JavaScript):

var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = "A.com/setCookie?cache=1231213123";
head.appendChild(script);

Это устанавливает cookie на A.com на каждом браузере, который я протестировал, кроме Safari. Удивительно это работает в IE6, даже без заголовков P3P.

Там какой-либо путь состоит в том, чтобы сделать эту работу в Safari?

61
задан billynoah 9 September 2019 в 23:57
поделиться

8 ответов

От Safari Developer FAQ :

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

я не нашел способа обойти это.

, Если это стоит чего-нибудь, Chrome не устанавливает cookie также, если Вы используете <script> добавление метода, но если у Вас есть скрытое <img> с тем же источником, работами Chrome в дополнение к остальной части браузеров (кроме, снова, Safari)

58
ответ дан Paolo Bergantino 24 November 2019 в 17:22
поделиться

Это не недостающий атрибут типа, это является раздражающим Вы?-)

<script type="text/javascript">
  var head = document.getElementsByTagName("head")[0];
  var script = document.createElement("script");
  script.setAttribute("type","text/javascript");
  script.src = "A.com/setCookie?cache=1231213123";
  head.appendChild(script);
</script>
-12
ответ дан roenving 24 November 2019 в 17:22
поделиться

Попробуйте что-то как:

var w = window.open("A.com/setCookie?cache=1231213123");
w.close();

Это может обойти политику безопасности сафари.

-2
ответ дан jcampbell1 24 November 2019 в 17:22
поделиться

Возможно, практично создайте и нажмите на ссылку с href="A.com/setCookie?cache=1231213123" и целевой атрибут, указывающий на скрытый iframe. То, что может политика обходного Safari пользовательской навигации для установки cookie (у меня нет Safari удобным для тестирования.)

0
ответ дан Zach 24 November 2019 в 17:22
поделиться

Я сделал некоторое обширное расследование вокруг этого, когда я пытался развернуть сайт, который использовал Windows Live ID, который зависел от способности смочь привести в порядок сторонние cookie, чтобы выйти из системы. Это просто... не работало. Ничто, что мы могли сделать, не заставит это работать. Живая идентификационная команда также сделала обширное расследование, и их ответ был, "не может заставить его работать".

0
ответ дан Brad Wilson 24 November 2019 в 17:22
поделиться

Существует что-то вроде злого приема, предполагающего, что у них есть установленная флэш-память.

я не уверен, работает ли это все еще или нет, но Flash'es "Локальные общие объекты" иначе , Флэш-куки могли бы помочь Вам плавать вокруг той-же-доменной-политики Safari.

Учебное руководство

по Локальному общему объекту Однако это может быть сложно для реализации по меньшей мере.

Additonally, LSO's прибывает в свет, как являющийся кошмаром безопасности:

Так думает тщательно перед использованием их.

4
ответ дан Kent Fredric 24 November 2019 в 17:22
поделиться

Обходной путь, который мы только что придумали в моей работе, заключался в установке cookie через window.open () - это может быть не оптимальным для вас (так как у вас будет уродливое всплывающее окно окно открыто), но у нас это сработало. В любом случае нам нужно было открыть всплывающее окно для аутентификации OAuth.

Итак, суть того, что мы сделали:

  1. Пользователь щелкает ссылку с B.com
  2. Всплывающее окно открывается на A.com/setCookie
  3. A.com устанавливает свой cookie, а затем перенаправляет на B.com в нужное место

Опять же, действует не во всех решениях, но сработало в нашем. Надеюсь, это поможет.

2
ответ дан 24 November 2019 в 17:22
поделиться

Обратите внимание на эту строку:

script.src = "A.com/setCookie?cache=1231213123";

Я не мог заставить это работать, пока я не добавил http, т.е.

script.src = "http://A.com/setCookie?cache=1231213123";
0
ответ дан 24 November 2019 в 17:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: