Поделитесь файлом 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.

Тогда шаги просты:

  1. добавить на сайт A скрытый фрейм на сайт B
  2. отправить куки B в A, используя window.postMessage
  3. сохранить полученный файл 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>