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


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

Спасибо ты!

Author: kakaajee, 2011-02-05

5 answers

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

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

 6
Author: Gumbo, 2011-02-05 12:58:54

При поиске в списке файлов 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 (расположен на 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.
}

Эта технология называется получением xss. например, он используется facebook для всех своих библиотек javascript connect.

Вероятно, лучшим способом было бы быть своего рода протоколом обмена токенами, таким как openid.

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

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

 9
Author: The Surrican, 2011-02-05 13:28:00

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

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

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

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

 1
Author: Frodik, 2011-02-05 12:56:31

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

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

 1
Author: quazardous, 2013-01-29 09:56:00

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

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

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

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

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

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

 0
Author: Anirudh Sood, 2014-12-31 06:35:49