У меня небольшая проблема.
Как установить cookie для нескольких доменов?
Я понимаю проблемы безопасности, и я уверен, что это было сделано раньше. Причиной этого является SSO.
то есть.
account.domain.com
необходимо будет указать домен для входа в систему:
domain.com, domain1.com, domain2.com.
Есть ли простой способ, используя PHP и файлы cookie или любые альтернативы?
Для domain.com нет абсолютно никакого способа установить cookie для домена1.com. То, что вы пытаетесь сделать, может быть разрешено только путем того, чтобы браузер пользователя отправлял запросы в каждый домен, который затем установил свой собственный файл cookie.
Затем вам нужно, чтобы каждый домен проверял личность пользователя. Существует два подхода к этому:
Это очень сложно. Я предлагаю вам не катиться самостоятельно. Взгляните на SimpleSAMLPHP на PHP-реализацию того, что я описываю.
То, что вы пытаетесь сделать, не может быть сделано. (Это проблема безопасности браузера, а не PHP).
Помимо использования какой-либо формы аутентификации вне сайта, ближайшей к ней вы можете сделать cookie, доступный через поддомены, и в этом случае вы просто используете необязательный параметр «domain» функции set_cookie PHP.
Это можно сделать через один домен, действующий как хозяин, а другие – как раб.
Скажем, у нас есть домен accounts.domain.com, и это наш мастер.
Тогда у нас есть наши slaves domain.com
, something.com
и another.com
Когда вы войдете в систему на домене.com, на самом деле это будет сайт accounts.domain.com
, тогда вы получите cookie с уникальным идентификатором для своего браузера, а затем вы будете перенаправлены на post-logon domain.com (например, domain.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>
). целевая страница свяжется с accounts.domain.com
записью.domain.com, запросив ее с идентификатором браузера. Если транзакция в порядке, то вы получите файл cookie для входа из domain.com
.
Далее, на каждом домене ( domain.com
, something.com
и another.com
) будет accounts.domain.com/roaming-check?return-url=<URL the redirect was initiated from>
перенаправление на accounts.domain.com/roaming-check?return-url=<URL the redirect was initiated from>
. Поскольку мы возвращаемся домой (мы уже зарегистрированы на сайте accounts.domain.com
), мы снова перенаправляемся на нашу целевую страницу ( <domain name>.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>
), и с этого момента это то же самое, что и часть с входом в систему. Мы беспрепятственно перемещаемся в другой домен (не зная этого, поскольку браузер обычно не показывает перенаправленную страницу, пока не передаст раздел заголовков send (server) / receive (browser)).
В случае, если на самом деле нет активного входа в систему, сайт сохранит этот «отрицательный вход в систему» на сеанс и больше не будет проверять вход в систему (пока мы не попытаемся войти в систему или загрузить другой домен).
Я думаю, что это решение подойдет вашим потребностям: « Simple Single Sign-On for PHP »