Cookies-набор для нескольких доменов

моя компания имеет установку как следует:

  • 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

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

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

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

Я вижу два решения: либо:

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

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

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

кто-нибудь знает о более простом способе достижения это?

5 ответов


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

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

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

и так далее.


этот ответ немного отличается от моего ответа на вопрос"установить cookie на нескольких доменах с PHP или JavaScript".

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

<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 обратный вызов на тело тег. Документ будет загружаться только тогда, когда изображения полностью загружаются, то есть когда куки установлены на других 2 доменах. Обратного Вызова Onload :

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

теперь cookies установлены на три Домены.

источник


включите тег скрипта из domain2, который устанавливает 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:

src:

<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
}

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


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

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

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