PHP Single Sign On (SSO), генерирующий новый идентификатор сеанса

Я пытаюсь создать процесс единого входа. Реализованный мной метод использует хранение данных сеанса в базе данных.

Когда новый пользователь заходит на сайт (www.example2.com) проверяется таблица аутентификации. Поскольку это их первый визит на сайт, совпадений не будет.

Браузер перенаправляется на сервер аутентификации www.example1.com/authenticate.php?session_id=ABC123, где ABC123 представляет идентификатор сеанса, созданный на www.example2.com. Идентификатор сеанса, который затем генерируется на www.example1.com, сохраняется вместе с идентификатором сеанса с использованием параметра, установленного в URL-адресе.

Затем пользователь перенаправляется обратно на www.example2.com, и должно быть найдено совпадение идентификаторов сеансов.

Это WAS отлично работало в FireFox, но когда я попробовал его в Chrome, я заметил, что идентификатор сеанса, генерируемый при перенаправлении браузера обратно на www.example2.com, является новым идентификатором сеанса. В результате создается бесконечный цикл. Это поведение не проявлялось и в FireFox.

Что вызывает создание нового идентификатора сеанса? Что еще более важно, что я могу сделать, чтобы остановить это?

Заранее спасибо!

EDIT
У меня была логическая ошибка, которая вызывала бесконечный цикл. Теперь это снова работает в FireFox, но бесконечный цикл все еще происходит в Chrome и Internet Explorer.


person bigstylee    schedule 06.05.2010    source источник


Ответы (2)


вся идея сеанса заключается в том, что он применяется только к одному домену. в противном случае другие домены могут захватить ваш сеанс. Браузер не должен отправлять файл cookie (содержащий идентификатор сеанса) для домена, для которого он не был написан. т. е. ваш идентификатор сеанса для входа в систему www.yourbank.com не должен быть прочитан веб-сайтом под названием www.preatesteallingtheieves.com, и браузер предотвратит это. (независимо от того, какое имя сеанса вы используете.)

SO: идентификаторы сеансов не передаются между доменами, даже если вы даете им одно и то же имя.

person Bingy    schedule 07.05.2010
comment
Я не активно меняю имена сеансов. Я просто сохраняю идентификатор сеанса, установленный сервером аутентификации и брокером, и создаю карту из двух в базе данных. таким образом, сервер авторизации относится к глобальным данным сеанса (т. е. идентификатору пользователя), а брокер хранит данные сеанса, специфичные для сайта (например, переменную изображения с картинки). - person bigstylee; 07.05.2010

Следуя логике кода, я внес некоторые изменения. Кажется, теперь все работает. Просто немного смущен тем, почему это не повлияло на FireFox.

Спасибо всем за проявленный интерес.

person bigstylee    schedule 07.05.2010
comment
Как вы решили это? У меня такая же проблема с Chrome и идентификатором сеанса. - person Lancelot; 05.05.2011
comment
да, было бы полезно, если бы вы поделились своим решением - person soupdiver; 24.04.2012