PHP-файлы cookie для нескольких доменов

Я хочу создать cookie из одного домена после регистрации пользователя на PHP. и сделать этот файл cookie доступным для 4 других доменов, а не для поддоменов. Я знаю, что файлы cookie не предназначены для доступа к другим доменам. Например, я установил переменную cookie $ user_email из домена www.firstdomain.com и хочу получить к ней доступ в других доменах, таких как www.seconddomain.com, www.thirddomain.com и т. Д. Возможно, это можно сделать с помощью PHP или JavaScript. Любая идея, пожалуйста.

Спасибо!

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

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

При поиске списка файлов cookie для действительных куки-файлов сравнение атрибутов домена cookie производится с именем домена в Интернете хоста, из которого будет извлекаться URL-адрес. Если есть хвостовое совпадение, cookie будет проходить через сопоставление пути, чтобы увидеть, следует ли его отправлять. «Соответствие хвоста» означает, что атрибут домена сопоставляется с хвостом полного доменного имени хоста. Атрибут домена «acme.com» соответствует именам хостов «anvil.acme.com», а также «shipping.crate.acme.com». Только хосты в указанном домене могут устанавливать cookie для домена, а для доменов должны быть не менее двух (2) или трех (3) периодов, чтобы предотвратить домены формы: «.com», «.edu» и «. va.us». Любой домен, который выходит из строя в одном из семи специальных доменов верхнего уровня, перечисленных ниже, требует только двух периодов. Для любого другого домена требуется не менее трех. Семь специальных доменов верхнего уровня: COM, EDU, NET, ORG, GOV, MIL и INT.

Значение по умолчанию для домена – это имя хоста сервера, сгенерировавшего ответ cookie.

читайте здесь .

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

вы можете получить доступ к атрибуту document.location из родительского окна (попадает в единственное, что доступно). расшифруйте его и передайте на сервер, выполнив запрос ajax.

Это может выглядеть так.

xss.php (находится на cookie.example.com):

<?php $data = array( 'uid' => $_COOKIE['uid'], 'loginhash' => $_COOKIE['loginhash']); header('Location: xss.php#'.urlencode(json_encode($data))); 

для этого конкретного случая он не должен быть хэштегом! его просто удобно для других ситуаций. это также можно сделать в javascript.

другой сайт включает xss.php:

 <iframe id="cookies" src="http://cookies.example.com/xss.php"></iframe> you need to somehow delay the following of do it in a loop that stops after 5 seconds or something. if(document.getElementById('cookies').location != 'http://cookies.example.com/xss.php') { // read location, extract hashtag, json decode using javscript, there you have your user. send it to server for validation or whatever. } 

этот teqnique называется xss. он, например, используется facebook для всех их библиотек подключений javascript.

вероятно, лучшим способом будет какой-то обмен токеном, например openid.

Amazon также использует это.

вы можете настроить провайдера openid (есть библиотеки, которые могут это сделать из коробки) и настроить его для автоматического перенаправления обратно без взаимодействия с пользователем. я часто видел протокол openid, используемый для некоторых других целей, как междоменная связь.

Я решил точно такую ​​же проблему (фактически также для 4 доменов). Единственное решение, с которым я столкнулся, состояло в том, чтобы включить 3 скрытых фрейма на «Успешную страницу входа», и эти iframes просто загружают http://www.domain1.com/register_session.php, http://www.domain2.com/register_session.php и т. Д. …

В качестве параметра для register_session.php я использую 'sid', который содержит идентификатор сеанса:

 session_id($_GET['sid']); session_start(); 

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

Я сделал несколько скриптов для обработки файлов cookie нескольких доменов:

https://code.google.com/p/mudoco/

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

  1. Создайте cookie в браузере пользователя с помощью JavaScript в вашем первом домене.

  2. Задайте имя окна для любого значения cookie, которое вы хотите перенести в другой домен, с помощью window.name .

  3. Шаг 2 должен выполняться на каждой странице домена, который создал файл cookie. Это может быть легко, вызвав файл JavaScript на всех страницах.

  4. Когда вы переходите в другой домен и хотите получить доступ к вышеупомянутому значению cookie, window.name к нему с помощью window.name поскольку window не изменилось.

  5. Создайте новый файл cookie в этом домене и назначьте ему это значение.