Как установить cookie для другого домена
Скажем, у меня есть сайт под названием a.com
и когда загружается определенная страница этого сайта, скажем, ссылка на страницу, я хочу установить файл cookie для другого сайта под названием b.com
, а затем перенаправить пользователя на b.com
,
Я имею в виду, на нагрузке a.com/link
Я хочу установить печенье для b.com
и перенаправить пользователя на b.com
,
Я проверил это, и браузер фактически получил cookie от a.com/link
, но он не отправил этот файл cookie в запросе на перенаправление b.com
, Это нормально?
Можем ли мы установить куки для других доменов?
8 ответов
Вы не можете установить куки для другого домена. Разрешение этого представило бы огромный недостаток безопасности.
Вы должны получить b.com, чтобы установить куки. Если a.com перенаправить пользователя на b.com/setcookie.php?c=value
Сценарий setcookie может содержать следующее, чтобы установить cookie и перенаправить на нужную страницу на b.com.
<?php
setcookie('a', $_GET['c']);
header("Location: b.com/landingpage.php");
?>
Аналогично верхнему ответу, но вместо перенаправления на страницу и обратно, что приведет к плохому пользовательскому опыту, вы можете установить изображение в домене A.
<img src="http://www.example.com/cookie.php?val=123" style="display:none;">
И затем в домене B, который является example.com в cookie.php, у вас будет следующий код:
<?php
setcookie('a', $_GET['val']);
?>
Хеттип к Субину
Ты не можешь Это было бы неприятным риском для безопасности.
Если у вас есть a.my-company.com
а также b.my-company.com
вместо просто a.com
а также b.com
Вы можете выпустить cookie для .my-company.com
домен - он будет принят и отправлен на оба домена.
См. RFC6265:
Пользовательский агент будет отклонять куки, если атрибут Domain не определяет область для куки, которая будет включать исходный сервер. Например, пользовательский агент примет файл cookie с атрибутом домена "example.com" или "foo.example.com" от foo.example.com, но пользовательский агент не примет файл cookie с атрибутом домена "bar.example.com" или "baz.foo.example.com".
ПРИМЕЧАНИЕ. В целях безопасности многие пользовательские агенты настроены на отклонение атрибутов домена, соответствующих "общедоступным суффиксам". Например, некоторые пользовательские агенты будут отклонять атрибуты домена "com" или "co.uk". (См. Раздел 5.3 для получения дополнительной информации.)
Но вышеупомянутый обходной путь с image / iframe работает, хотя это не рекомендуется из-за его небезопасности.
Настройка файлов cookie для другого домена невозможна.
Если вы хотите передать данные в другой домен, вы можете закодировать это в URL.
a.com -> b.com/redirect?info=some+info (and set cookie) -> b.com/other+page
Вы не можете, но... Если у вас есть обе страницы, то...
1) Вы можете отправить данные через параметры запроса ( http://siteb.com/?key=value)
2) Вы можете создать iframe сайта B внутри сайта A и отправлять сообщения из одного места в другое. Поскольку сайт B является владельцем файлов cookie сайта B, он сможет установить любое необходимое вам значение, обработав правильное почтовое сообщение. (Вы должны запретить другим нежелательным отправителям отправлять вам сообщения! Это зависит от вас и механизма, который вы решите использовать, чтобы этого не произошло)
Вот что я использовал. Обратите внимание, что этот файл cookie передается в открытом (http) формате и поэтому небезопасен. Я не использую его ни для чего, что требует безопасности.
- Сайт A генерирует токен и передает в качестве параметра URL сайту B.
- Сайт B принимает токен и устанавливает его как файл cookie сеанса.
Возможно, вы могли бы добавить шифрование / подписи, чтобы сделать это безопасным. Изучите, как это сделать правильно.
Отправьте запрос POST от A. Почтовые запросы находятся только на стороне сервера и не могут быть доступны для клиента.
Вы можете отправить запрос POST из a.com
к b.com
используя CURL (рекомендуется на стороне сервера) или скрытый method="POST"
форма (на стороне клиента). Если вы выберете последнее, вы можете скрыть свой JavaScript, чтобы пользователь не мог понять алгоритм и вмешиваться в него.
Сделайте шлюз на b.com
для установки файлов cookie:
<?php
if (isset($_POST['data']) {
setcookie('a', $_POST['data']);
header("Location: b.com/landingpage");
}
?>
Если вы хотите повысить безопасность, реализуйте функцию с обеих сторон (a.com
а также b.com
) зашифровать (на a.com
) и расшифровать (на b.com
) данные с использованием криптографического шифра.
Если вы пытаетесь сделать что-то, что должно быть абсолютно безопасным (например, передать сеанс входа в систему), попробуйте oAuth или почерпните вдохновение из https://api.cloudianos.com/docs
По этой ссылке мы найдем решение Link.
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "b.com", 1);