Сессии PHP с несколькими поддоменами на одном сервере

У меня есть несколько вопросов о сессиях PHP, которые я смог бы выяснить с помощью найденных страниц.

Но сначала немного общей информации, я хочу создать несколько поддоменов на одном сервере,

sub1.domain.com -> 10.10.10.10 (Образец IP Сервера)

sub2.domain.com -> 10.10.10.10 (Образец IP Сервера)

sub3.domain.com -> 10.10.10.10 (Образец IP Сервера)

все эти субдомены будут работать с одними и теми же файлами, но они должны иметь свои собственные сеансы, например, если я вошел в систему на sub1 и я открыл sub2, мне нужно выйти из системы для этого субдомена.

  1. Может кто-нибудь объяснить мне, как это может работать?
  2. Как это работает с несколькими серверами (например, циклический перебор DNS), все ли серверы знают сеанс, например, sub1?

1

Решение

По умолчанию PHP использует файл cookie PHPSESSID для распространения данных сеанса на несколько страниц, и по умолчанию он использует текущий домен верхнего уровня и поддомен в объявлении cookie.

Пример: www.domain.com

Недостатком этого является то, что данные сеанса не могут перемещаться с вами в другие поддомены. Таким образом, если вы начали сеанс на www.domain.com, данные сеанса станут недоступны на forums.domain.com. Решение состоит в том, чтобы изменить домен, который PHP использует, когда устанавливает cookie «PHPSESSID».

Предполагая, что у вас есть файл инициализации, который вы включаете в верхней части каждой страницы PHP, вы можете использовать функцию ini_set (). Просто добавьте это в начало вашей страницы инициализации:

ini_set (‘session.cookie_domain’, substr ($ _ SERVER [‘SERVER_NAME’], strpos ($ _ SERVER [‘SERVER_NAME’], «.»), 100));

Эта строка кода забирает домен и удаляет субдомен.

Пример: forums.domain.com -> .domain.com

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


вам нужно

ini_set («session.cookie_domain», «.mydomain.com»);

добавьте его перед функцией session.start () на любой странице, которая создает cookie сессии.

Или вы можете добавить:

session.cookie_domain = .mydomain.com

на php.ini

Убедитесь, что вы очистили свои куки, прежде чем попробовать.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]