Установить сеанс для разных доменов с одного сервера? - PullRequest
1 голос
/ 17 июля 2009

Кто-нибудь знает, могу ли я установить значение сеанса для текущего домена и использовать этот сеанс для другого домена?

Например:

когда я устанавливаю сеанс в домене www.aabc.com и хочу, чтобы этот сеанс также работал в домене www.ccc.com - я нажимаю кнопку на www.aabc.com и меняю заголовок на www.ccc .com

Ответы [ 3 ]

3 голосов
/ 17 июля 2009

Я должен был установить это на моей последней работе. То, как это было обработано, проходило через какое-то ручное и полужесткое прохождение хеша.

По сути, каждый сайт, сайт A и сайт B имеют идентичные настройки шлюза для каждого домена. Шлюз принимает user ID, timestamp, redirect URL и hash. hash состоит из shared key, timestamp, user ID.

Сайт A генерирует хэш и отправляет всю вышеперечисленную информацию шлюзу на сайте B. Затем сайт B хэширует полученные переданные user ID и timestamp с shared key.

Если сгенерированный хэш совпадает с полученным хешем, то шлюз регистрирует пользователя и загружает его сеанс из таблицы общей памяти или пула memcached и перенаправляет пользователя на полученный redirect url.

Наконец, timestamp используется, чтобы иметь возможность определить срок действия для переданного переданного hash (например: хеш действителен только для x времени). Что-то около 2,5 минут - это то, что мы использовали для нашего TTL (для учета задержки сети и, возможно, обновления или двух).

Ключевые моменты здесь:

  • Наличие общего ресурса, где сеансы могут быть сериализованы
  • Использование общего ключа для создания и подтверждения хэшей (если вы собираетесь использовать md5, сделайте несколько проходов)
  • Разрешить хэш может быть допустимым только в течение небольшого, но разумного промежутка времени.
  • Для этого требуется контроль над обоими доменами.

Надеюсь, это было полезно.

2 голосов
/ 17 июля 2009

Вы не можете получить доступ к сеансам обоих доменов напрямую, однако существуют законные решения для передачи данных сеанса между двумя сайтами, которые вы контролируете. Для данных, которые могут быть изменены, вы можете просто создать страницу на домене abc.com, загрузить «изображение» размером 1 на 1 пиксель на xyz.com и передать соответствующие данные в строку запроса. Это очень небезопасно, поэтому убедитесь, что пользователь не может ничего сломать, подделав его.

Другой вариант - использовать какой-то общий магазин. Если они имеют доступ к одной и той же базе данных, это может быть таблица, в которой домен abc.com хранит запись, а затем передает идентификатор записи в домен xyz.com. Это более подходящий подход, если вы пытаетесь передать информацию для входа. Просто убедитесь, что вы скрыли идентификаторы, чтобы пользователь не мог угадать другой идентификатор записи.

Другой подход к методу общего хранилища, если эти два домена находятся на разных серверах или не могут получить доступ к одной и той же базе данных, заключается в реализации некоторого вида службы хранилища кеша, которая будет хранить информацию некоторое время и доступна обоим доменам. Домен abc.com передает некоторые данные, и служба передает идентификатор, который домен abc.com отправляет домену xyz.com, который затем возвращается к службе, запрашивая данные. Опять же, если вы разрабатываете эту услугу самостоятельно, убедитесь, что вы запутываете идентификаторы.

2 голосов
/ 17 июля 2009

Вы можете установить куки только для своего домена (и других сайтов в вашем домене, например, субдоменов, если я правильно помню).

Это (в основном?) Из соображений безопасности: иначе любой может установить куки для любого веб-сайта ... Я позволю себе представить беспорядок ^^

(Единственный способ установить файлы cookie для другого домена - использовать дыру в безопасности браузера - см., Например, http://en.wikipedia.org/wiki/Cross-site_cooking; поэтому в обычных случаях это невозможно - к счастью)

...