Как установить 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']);
?>

Хеттип к Субину

Пробалы можно использовать Iframe за это. Facebook, вероятно, использует эту технику. Вы можете прочитать больше об этом здесь. Stackru использует похожую технику, но с локальным хранилищем HTML5, подробнее об этом в своем блоге

Ты не можешь Это было бы неприятным риском для безопасности.

Если у вас есть 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) формате и поэтому небезопасен. Я не использую его ни для чего, что требует безопасности.

  1. Сайт A генерирует токен и передает в качестве параметра URL сайту B.
  2. Сайт 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);
Другие вопросы по тегам