PHP Cookies для нескольких доменов

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

спасибо ты!

5 ответов


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

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


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

значение по умолчанию для домена имя хоста сервера, который сгенерировал ответ куки.

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

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

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

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

XSS-атак.php (находится на cookies.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 (есть библиотеки, которые могут сделать это из коробки) и установить его на auotmatically редирект обратно без взаимодействия с пользователем. я часто видел протокол openid, используемый для некоторых других целей, таких как междоменная связь.


Я решил точно такую же проблему (на самом деле также для 4 доменов). Единственное решение, которое я придумал, чтобы включить 3 скрытые фреймы на странице входа, и эти фреймы просто загрузить www.domain1.com/register_session.php, 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 trick. Поскольку cookie можно получить в том же домене.

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

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

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

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

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