PHP Multi site login

В настоящее время я работаю над проектом, охватывающим несколько доменов. Я хочу, чтобы пользователь мог войти в систему на одном сайте и одновременно войти на все остальные.

Сеанс пользователя хранится в базе данных, файлы cookie, которые я установил для каждого домена, содержат идентификатор сеанса.

Итак, в основном, когда пользователь входит на example.com, создается файл cookie с его идентификатором сеанса, данные сеанса сохраняются в базе данных. Как только это будет сделано, на всех остальных доменах должен быть создан файл cookie с этим уникальным идентификатором сеанса, чтобы пользователь, перемещаясь с сайта на сайт, автоматически входил в систему.

Теперь я нашел способ сделать это в Firefox (используя теги изображений, которые запускают сценарии PHP в других доменах, по сути создавая разные файлы cookie в разных доменах), но этот метод не работает в IE (не тестировал Opera или Сафари и т.д. пока нет).

Есть ли у кого-нибудь идеи о том, как я могу заставить это работать в IE?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
7
0
4 539
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Не уверен, что это хорошее предложение на данном этапе вашей разработки, но вам обязательно стоит взглянуть на Единая точка входа, если вы хотите сделать это «правильным» способом.

Да, это то, что я ищу, и мне удалось добиться этого с помощью Firefox, но он не работает с IE. Может, я просто ошибаюсь.

user48526 23.12.2008 17:51

Я сам этого не делал, но думаю, вы идете правильным путем. Я бы, наверное, сделал то же самое, только вместо изображения я бы использовал файл Javascript. Он будет сгенерирован на стороне сервера и обновит файлы cookie на стороне клиента.

Это только я, или это похоже на то, что ваш CSRF использует вашу технику с изображениями, которые работают в Firefox?

Интересный подход, хотя я надеюсь, что вы там не подвергаетесь угрозе безопасности.

Первоначально я так думал и фактически обнаружил, что это проблема. Однако после небольшого экспериментирования и т. д. Я думаю, что справился с этим.

user48526 23.12.2008 17:53

Возможно, я был немного глуп, но не могли бы вы установить файлы cookie для каждого доменного имени при входе в систему? Значит, вместо того, чтобы иметь один файл cookie при входе на сайт A, у них есть пять или сколько у вас сайтов?

setcookie(A, $sessid, expire, path, domainA.com);
setcookie(B, $sessid, expire, path, domainB.com);
setcookie(C, $sessid, expire, path, domainC.com);
setcookie(D, $sessid, expire, path, domainD.com);

Да, сначала попробовал, похоже, не сработало, так как я не думаю, что вы можете устанавливать файлы cookie для других доменов, только для домена, в котором вы находитесь. Я полагаю, это действительно имеет смысл, если задуматься.

user48526 23.12.2008 17:54

Вам не разрешено устанавливать файлы cookie для других доменов.

Luceos 16.05.2013 13:54
Ответ принят как подходящий

Взгляните на мой вопрос Междоменное отслеживание пользователей.

Что вам нужно сделать, так это добавить еще один HTTP-заголовок к «изображению».

Цитата из Переменные сеанса теряются, если вы используете FRAMESET в Internet Explorer 6.:

You can add a P3P compact policy header to your child content, and you can declare that no malicious actions are performed with the data of the user. If Internet Explorer detects a satisfactory policy, then Internet Explorer permits the cookie to be set.

A simple compact policy that fulfills this criteria follows:

P3P: CP = "CAO PSA OUR"

This code sample shows that your site provides you access to your own contact information (CAO), that any analyzed data is only "pseudo-analyzed", which means that the data is connected to your online persona and not to your physical identity (PSA), and that your data is not supplied to any outside agencies for those agencies to use (OUR).

You can set this header if you use the Response.AddHeader method in an ASP page. In ASP.NET, you can use the Response.AppendHeader method. You can use the IIS Management Snap-In (inetmgr) to add to a static file.

Follow these steps to add this header to a static file:

  1. Click Start, click Run, and then type inetmgr.
  2. In the left navigation page, click the appropriate file or directory in your Web site to which you want to add the header, right-click the file, and then click Properties.
  3. Click the HTTP Headers tab.
  4. In the Custom HTTP Headers group box, click Add.
  5. Type P3P for the header name, and then for the compact policy string, type CP=..., where "..." is the appropriate code for your compact policy.

Это именно то, что я обнаружил, это была настройка среды по умолчанию в IE, которая блокировала его. Добавив код: заголовок ('P3P: CP = "IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); теперь все работает отлично: D

user48526 23.12.2008 17:55

Другие вопросы по теме