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 в разных доменах, это можно сделать с помощью JavaScript trick. Поскольку cookie можно получить в том же домене.
создайте cookie в браузере пользователя с помощью JavaScript в вашем первом домене.
установите имя окна на любое значение cookie, которое вы хотите перенести в другой домен, используя
window.name
.Шаг 2 должен выполняться на каждой странице домена который создал cookie. Это может быть легко, вызвав файл JavaScript на всех страницах.
когда вы переходите в другой домен и хотите получить доступ к вышеупомянутому значению cookie, получите доступ к нему с помощью
window.name
aswindow
не изменилась.создайте новый файл cookie в этом домене и назначьте ему это значение.