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>
вы можете проверить, чтобы убедиться, что хэшированные пароли совпадают (в одну сторону).
ключевые моменты:
сделайте хэши в URL-адресе чувствительными ко времени, добавив метку времени, которая будет согласована сервером (например, 16:00, 16:10 и т. д.) Перед хэшированием строки. Если вы используете HTTPS, это меньше вопрос.
Если ваши пароли уже хэшируются, не повредит удвоить хэш паролей, предполагая, что соли одинаковы на обоих серверах.
пример кода 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, а также изменяет тело ответа для отправки соответствующих данных обратно, чтобы я мог прочитать эти данные и установить свои собственные куки.
делая это, я могу вручную отслеживать, что мне нужно. Не во всех сценариях сработает, но для таких, как я.