Поделитесь файлом cookie между двумя веб-сайтами
Я создал сайт (A), который регистрируется и извлекает данные клиента из отдельной веб-службы.
У организации, которая владеет (A), также есть веб-сайт (B), который имеет веб-форму. Они хотят, чтобы вошедший в систему клиент (A) мог щелкнуть по ссылке (B) и просмотреть предварительно заполненную форму с их деталями.
Это означает, что (A) должен записывать свой идентификатор клиента в файл cookie, который (B) может читать, а затем (B) может запрашивать данные из веб-службы и предварительно заполнять форму.
Это вызывает два вопроса:
-
Может ли веб-сайт (B) читать файл cookie для веб-сайта (A)?
-
Если это так, чтобы кто-то не редактировал файл cookie и не видел данные других людей в форме, мне нужно было сделать что-то вроде шифрования файла cookie (A) и затем расшифровать его в (B) - любой предложения по этой линии?
Я не могу изменить существующий логин на OAuth или что-то еще, поскольку веб-служба потребляется несколькими другими сайтами, поэтому это не может измениться.
Ответы
Ответ 1
Нет. Веб-сайт B не может читать cookie с веб-сайта A.
Самый простой способ - передать информацию входа/доступа с веб-сайта A на веб-сайт B и создать веб-сайт B для отдельного файла cookie. Например, после входа в веб-сайт A вы могли бы быстро перенаправить их на веб-сайт B с зашифрованным запросом. Затем веб-сайт B мог прочитать информацию, установить свой собственный файл cookie и перенаправить пользователя обратно на сайт A.
Это беспорядочно, но возможно.
Ответ 2
Вы упомянули, что одна и та же компания владеет обоими сайтами. Как вы подозревали, если сайты имеют тот же домен, что и www.mycompany.com и store.mycompany.com, они могут совместно использовать файлы cookie. Заголовок ответа HTTP будет выглядеть примерно так:
Set-Cookie: user_id=1295214458; Path=/; Domain=.mycompany.com
Поскольку клиент имеет прямой доступ к этим данным, вы должны также включить подпись, чтобы было обнаружено несанкционированное вмешательство. Обычно все это зашифровывается и подписывается в "токен", и это устанавливается как файл cookie. Но технически, требуется только подпись.
Ответ 3
Если в вашем случае все ваши пользователи используют браузеры с поддержкой HTML5, вы можете использовать метод window.postMessage
который позволяет addEventListener
с одной стороны и postMessage
с другой. Вот хорошая статья/пример: https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage.
Тогда шаги просты:
- добавить на сайт A скрытый фрейм на сайт B
- отправить куки B в A, используя window.postMessage
- сохранить полученный файл cookie в файле cookie
Ответ 4
Файлы cookie доступны только для одного домена, для которого они установлены.
Я полагаю, что если вы используете два поддомена в одном домене, можно будет делиться куки файлами, однако браузер не отправляет файлы cookie, установленные в одном домене, третьим лицам.
Изменить: вы также хотите избежать хранения больших объемов данных в файле cookie. Возможно ли, что вы могли бы создать api, на котором сайт B мог запрашивать с помощью javascript?
Ответ 5
В Интернете есть инструменты с открытым исходным кодом, которые могут это сделать, но это противоречит идее философии cookie. Куки файлы предназначены для доступа только к одному домену. Тем не менее, вы можете высмеять этот домен и "Hack" в браузере. Это не рекомендуется, и некоторые браузеры имеют более жесткую защиту и не допускают этого.
Я предлагаю вам создать веб-сервис на веб-сайте A и предоставить доступ для чтения к B, чтобы прочитать его.
Ответ 6
Потенциальная работа: вы можете использовать встроенный фрейм на вторичном сайте, чтобы показывать контент с основного сайта (занимая полное окно):
<!DOCTYPE HTML>
<html>
<head>
<title>your page title</title>
<style type="text/css">
body, html {
margin: 0; padding: 0; height: 100%; overflow: hidden;
}
#content {
position:absolute; left: 0; right: 0; bottom: 0; top: 0px;
}
</style>
</head>
<body>
<div id="content">
<iframe width="100%" height="100%" frameborder="0" src="http://yourMainSite.com/dataDependentPage.php" ></iframe>
TESTING
</div>
</body>
</html>
Ответ 7
Свойство HttpCookie.Domain может помочь.
Выдержка:
MyCookie.Domain = domainName;