Я должен назвать домен 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?
От Safari Developer FAQ
:
Safari поставлется с консервативной политикой в отношении файлов куки, которая ограничивает записи cookie только выбранными страницами ("перемещенный к") пользователем. Эта консервативная политика по умолчанию может перепутать основанные на кадре сайты, которые пытаются записать cookie и сбой.
я не нашел способа обойти это.
, Если это стоит чего-нибудь, Chrome не устанавливает cookie также, если Вы используете <script
> добавление метода, но если у Вас есть скрытое <img
> с тем же источником, работами Chrome в дополнение к остальной части браузеров (кроме, снова, Safari)
Это не недостающий атрибут типа, это является раздражающим Вы?-)
<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>
Попробуйте что-то как:
var w = window.open("A.com/setCookie?cache=1231213123");
w.close();
Это может обойти политику безопасности сафари.
Возможно, практично создайте и нажмите на ссылку с href="A.com/setCookie?cache=1231213123"
и целевой атрибут, указывающий на скрытый iframe. То, что может политика обходного Safari пользовательской навигации для установки cookie (у меня нет Safari удобным для тестирования.)
Я сделал некоторое обширное расследование вокруг этого, когда я пытался развернуть сайт, который использовал Windows Live ID, который зависел от способности смочь привести в порядок сторонние cookie, чтобы выйти из системы. Это просто... не работало. Ничто, что мы могли сделать, не заставит это работать. Живая идентификационная команда также сделала обширное расследование, и их ответ был, "не может заставить его работать".
Существует что-то вроде злого приема, предполагающего, что у них есть установленная флэш-память.
я не уверен, работает ли это все еще или нет, но Flash'es "Локальные общие объекты" иначе , Флэш-куки могли бы помочь Вам плавать вокруг той-же-доменной-политики Safari.
по Локальному общему объекту Однако это может быть сложно для реализации по меньшей мере.
Additonally, LSO's прибывает в свет, как являющийся кошмаром безопасности:
Так думает тщательно перед использованием их.
Обходной путь, который мы только что придумали в моей работе, заключался в установке cookie через window.open () - это может быть не оптимальным для вас (так как у вас будет уродливое всплывающее окно окно открыто), но у нас это сработало. В любом случае нам нужно было открыть всплывающее окно для аутентификации OAuth.
Итак, суть того, что мы сделали:
Опять же, действует не во всех решениях, но сработало в нашем. Надеюсь, это поможет.
Обратите внимание на эту строку:
script.src = "A.com/setCookie?cache=1231213123";
Я не мог заставить это работать, пока я не добавил http, т.е.
script.src = "http://A.com/setCookie?cache=1231213123";