Cookies - установить на несколько доменов - PullRequest
12 голосов
/ 07 декабря 2011

Моя компания настроена следующим образом:

  • subdomain1.domain1.com
  • subdomain2.domain1.com
  • subdomain3.domain1.com
  • subdomain4.domain1.com
  • subdomain5.domain1.com
  • subdomain6.domain1.com

  • subdomain1.domain2.com

  • subdomain2.domain2.com
  • subdomain3.domain2.com
  • subdomain4.domain2.com
  • subdomain5.domain2.com
  • subdomain6.domain2.com

На каждом сайте, учитывая, что на поддомен может быть сотня сайтов, пользователи могут войти в систему. Мы, как разработчики, должны тестировать интерфейсы в нескольких браузерах, но некоторая работа может потребоваться только в разделе после входа в систему. .

Я написал скрипт пользователя, который позволяет нам сохранять имя пользователя и пароль (и другие детали, которые я не могу упомянуть из-за конфиденциальности). Сценарий проверяет, существует ли учетная запись пользователя, заполнив форму входа и нажав кнопку отправки. Если нет, то он регистрируется у нас - таким образом автоматизирует процесс регистрации.

Обмен файлами cookie между поддоменами в одном домене очень прост. Если я нахожусь на subdomain1.domain1.com, я могу сохранить cookie, который может быть получен с subdomain2.domain1.com. Тем не менее, я также хотел бы сохранить их для domain2. Кажется, я не могу заставить это работать.

Здесь я вижу два решения: либо:

1) прикрепить iFrame, используя скрипт пользователя, который загружает сайт в домен2. Затем он использует строку запроса, чтобы решить, что устанавливать для чего, или;

2) используйте форму с методом = "POST" и просто публикуйте файл в каждом домене.

В любом случае это будет ресурсоемкий процесс, особенно если файлы cookie обновляются при каждом изменении файла cookie. У нас также есть маскировка URL. Поэтому мы также должны учитывать такие сайты, как abc.clientdomain1.com, abc.clientdomain2.com и т. Д.

Кто-нибудь знает более простой способ добиться этого?

Ответы [ 5 ]

11 голосов
/ 07 декабря 2011

Создайте общий домен специально для ваших файлов cookie и используйте его в качестве API получения / установки.

http://cookie.domain.com/set/domain1
http://cookie.domain.com/get/domain1

http://cookie.domain.com/set/domain2
http://cookie.domain.com/get/domain2

и т. Д.

8 голосов
/ 15 января 2014

Этот ответ представляет собой несколько иную версию моего ответа на вопрос " Установить cookie для нескольких доменов с помощью PHP или JavaScript ".

Делай то, что делает Google. Создайте файл PHP (или любой другой файл на языке сервера), который устанавливает cookie на всех 3 доменах. Затем в домене, где будет установлен логин, создайте файл HTML , который будет загружать файл PHP , который устанавливает cookie в двух других доменах. Пример:

<html>
 <head></head>
 <body>
 Please wait..........
 <img src="http://domain2.com/setcookie.php?user=encryptedusername"/>
 <img src="http://domain3.com/setcookie.php?user=encryptedusername"/>
 </body>
</html>

Затем добавьте обратный вызов onload к тегу body . Документ будет загружаться только тогда, когда изображения полностью загружаются, то есть когда файлы cookie установлены на двух других доменах. Onload Callback:

<head>
 <script>
 function loadComplete(){
  window.location="http://domain1.com";//URL of domain1
 }
 </script>
</head>
<body onload="loadComplete()">

Теперь файлы cookie установлены на трех доменах.

Источник

2 голосов
/ 07 декабря 2011

Включите тег сценария из домена2, который устанавливает cookie с использованием имени пользователя и хэшированного пароля:

<script type="text/javascript" src="http://domain2.com/cookie_login_page.php?username=johnsmith&hash=1614aasdfgh213g"></script>

Затем можно проверить, что хешированные пароли совпадают (в одну сторону).

Ключевые моменты:

  1. Сделать хэши в URL-адресе чувствительными к времени, добавив метку времени, которая будет согласована сервером (например, 16:00, 16:10 и т. Д.)перед хэшированием строки.Если вы используете HTTPS, это не проблема.

  2. Если ваши пароли уже хешированы, не повредит двойное хеширование паролей при условии, что соли на обоих серверах одинаковы.

Пример кода PHP:

Источник:

<script type="text/javascript" src="/cookie_login_page.php?username=<?php echo $username; ?>&hash=<?php echo md5($password . date('H')); ?>"></script>

dest:

<?php 

$password = get_password($_GET['username']);
if($_GET['hash'] == md5($password . date('H')) {
    // set the cookie
}
2 голосов
/ 07 декабря 2011

В целях безопасности сайты не могут устанавливать или получать файлы cookie на других доменах.Сценарии отправки формы через javascript, вероятно, проще всего сделать, и они по-прежнему будут хранить нужные вам файлы в кеше браузера.

0 голосов
/ 10 июля 2014

Как утверждают другие, вы не можете получить доступ к файлам cookie через домены. Однако, если у вас есть контроль над кодом сервера, вы можете вернуть информацию в теле и позволить своему клиенту читать и хранить эту информацию для каждого сервера.

В моем случае я подключаю одного клиента к нескольким серверам, сохраняя аутентифицированное соединение с каждым. Мне нужно знать, когда истекает сеанс для каждого из них, поэтому служба аутентификации возвращает куки, плюс она изменяет тело ответа, чтобы отправить соответствующие данные обратно, чтобы я мог прочитать эти данные и установить свои собственные куки .

Делая это, я могу вручную отслеживать то, что мне нужно. Не будет работать в каждом сценарии, но может для некоторых, как я.

...