PHP Cookies для нескольких доменов - PullRequest
7 голосов
/ 05 февраля 2011

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

Спасибо!

Ответы [ 5 ]

9 голосов
/ 05 февраля 2011

При поиске действительных файлов 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.

read here .

вы можете загрузить 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.
}

этот метод называется XSS Reciving.например, он используется Facebook для всех своих библиотек подключения javascript.

возможно, лучшим способом было бы использовать протокол обмена токенами, такой как openid.

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

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

6 голосов
/ 05 февраля 2011

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

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

1 голос
/ 29 января 2013

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

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

1 голос
/ 05 февраля 2011

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

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

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

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

0 голосов
/ 31 декабря 2014

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

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

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

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

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

  5. Создайте новый файл cookie для этого домена и присвойте ему это значение.

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