Периферийные файлы
У меня небольшая проблема.
Как установить cookie для нескольких доменов?
Я понимаю проблемы безопасности, и я уверен, что это было сделано раньше. Причиной этого является SSO.
т.
account.domain.com
необходимо указать домен, зарегистрированный для:
domain.com,
domain1.com,
domain2.com.
Есть ли простой способ, используя PHP и файлы cookie или любые альтернативы?
Ответы
Ответ 1
У домена domain.com нет никакого способа установить cookie для домена1.com. То, что вы пытаетесь сделать, может быть разрешено только путем того, чтобы пользовательский браузер отправлял запросы в каждый домен, который затем установил свой собственный файл cookie.
Затем вам нужен способ для каждого домена, чтобы проверить идентификатор пользователя. Существует два подхода к этому:
- Обратный канал - сайты свяжутся друг с другом напрямую, чтобы определить, зарегистрирован ли пользователь.
- Передача маркера в GET или POST - когда пользовательский броузер перенаправляется на другой сайт, передается цифровой знак, содержащий статус идентификации и сеанса.
Это действительно довольно сложно. Я предлагаю вам не катиться самостоятельно. Посмотрите SimpleSAMLPHP для реализации PHP того, что я описываю.
Ответ 2
То, что вы пытаетесь сделать, невозможно. (Это проблема безопасности браузера, а не PHP).
Помимо использования какой-либо формы аутентификации вне сайта, ближайшей к ней вы можете сделать cookie, доступный через поддомены, и в этом случае вы просто используете необязательный "домен" arg PHP set_cookie.
Ответ 3
Это можно сделать через один домен, действующий как мастер, а другие - как подчиненный.
Скажем, у нас есть домен accounts.domain.com, и это наш мастер.
Затем у нас есть наши подчиненные domain.com
, something.com
и another.com
Когда вы войдете в систему на домене com.com, это будет фактически сайт accounts.domain.com
, тогда вы получите куки файл с уникальным идентификатором для своего браузера, а затем вы будете перенаправлены на post.com domain.com, (т.е. domain.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>
). целевая страница свяжется с accounts.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
), мы снова перенаправляемся на нашу целевую страницу (<domain name>.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>
), и с этой точки она будет такой же, как и часть с входом в систему. Мы беспрепятственно перемещаемся в другой домен (не зная этого, поскольку браузер обычно не показывает перенаправленную страницу, пока не передаст раздел заголовков send (server)/receive (browser)).
Если на самом деле нет активного входа в систему, сайт сохранит этот "отрицательный вход" в сеанс, а не пытается проверить вход в систему (пока мы не попытаемся войти в систему или загрузить другой домен).
Ответ 4
Я думаю, что это решение подойдет вашим потребностям: " Простой Single Sign-On для PHP"