Подтвердить что ты не робот

Периферийные файлы

У меня небольшая проблема.

Как установить cookie для нескольких доменов?

Я понимаю проблемы безопасности, и я уверен, что это было сделано раньше. Причиной этого является SSO.

т.

account.domain.com необходимо указать домен, зарегистрированный для:

domain.com, domain1.com, domain2.com.

Есть ли простой способ, используя PHP и файлы cookie или любые альтернативы?

4b9b3361

Ответ 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)).

Если на самом деле нет активного входа в систему, сайт сохранит этот "отрицательный вход" в сеанс, а не пытается проверить вход в систему (пока мы не попытаемся войти в систему или загрузить другой домен).