Мне нужно размещать несколько разных сервисов на разных поддоменах, разделяющих один и тот же домен верхнего уровня, и я хочу централизовать процедуру входа в систему.
Идея заключалась в том, чтобы:
site1.tld.com
site2.tld.com
site3.tld.com
siteX.tld.com
login.tld.com
И перенаправить пользователей на login.tld.com
. Затем, после регистрации, они могут иметь доступ к услугам.
Какой лучший способ в PHP реализовать и обеспечить?
Можно ли не хранить локальные файлы cookie и не открывать сеанс?
добавление более подробной информации
Мне нужно, чтобы пользователь также имел возможность запомнить соединение после закрытия браузера. У меня есть полный доступ к серверу, поэтому я могу настроить php.ini, поскольку я хочу
Если вы не хотите устанавливать локальный файл cookie, вам нужно будет придерживаться сеансов. Наличие сеанса в поддоменах работает с крошечным битом, отличным от одного домена. Поэтому давайте начнем.
Сначала нам нужно предоставить нашему сеансовому файлу новое имя session_name(). Мы должны сделать это, потому что имя сеанса должно быть определено до установки параметров cookie. Это сохранит имя старого сеанса под $old_name
и обновит имя вашей сессии до "some_name":
$old_name = session_name("some_name");
Затем мы должны установить параметры cookie сеанса с помощью session_set_cookie_params(). Здесь, где мы говорим нашему серверу, на котором будет работать cookie сессии:
session_set_cookie_params(0, '/', '.tld.com');
Предваряя третий параграф (домен "tld.com") точкой, мы убеждаемся, что cookie сессии будет виден на всех поддоменах. В качестве альтернативы вы также можете использовать:
ini_set('session.cookie_domain', '.tld.com');
Наконец, мы должны начать или возобновить нашу сессию в нашем скрипте с session_start():
session_start();
Итак, чтобы подвести итог, вы должны иметь это поверх каждого сценария, который будет использовать ваши сеансы:
<?php
$old_name = session_name("some_name");
session_set_cookie_params(0, '/', '.tld.com');
//ini_set('session.cookie_domain', '.tld.com'); //Uncomment and comment above line if prefered.
session_start();
В качестве побочного я должен включить, что параметры php.ini не разрешены для большинства хостинг-провайдеров. Этот сценарий предполагает, что у вас есть полный доступ к вашему серверу или, по крайней мере, к поставщику, который хочет изменить эти настройки.