Настройте _Session для работы с приложениями, развернутыми на нескольких серверах, разными субдоменами

У меня есть веб-сайт, который состоит из двух приложений:

  1. Передняя часть
  2. Бэкэнд-приложение

Передняя часть имеет домен www, тогда как бэкэнд имеет поддомен работы. Например, мое приложение для job.example.com/* интерфейса имеет домен www.example.com/* , тогда как мой бэкенд – job.example.com/* . Мое приложение переднего плана может располагаться на одном сервере, тогда как задний конец может находиться на другом сервере . Или они оба хранятся на одном сервере.

Теперь возникает вопрос, могут ли переменные сеанса, хранящиеся в супер-глобальном _Session (PHP), работать в разных поддоменах. Если я установлю _Sesssion["SessionID"] в www.example.com/* , могу ли я получить тот же _Sesssion ["SessionID"] из job.example.com/* ? Нужно ли выполнять специальную настройку?

Для использования одних и тех же сеансов на нескольких доменах / серверах вам необходимо позаботиться о двух аспектах:

  • где хранятся данные сеанса, так что оба домена / серверы могут получить к нему доступ, и
  • как идентификатор сеанса переносится вдоль обоих доменов / серверов так, чтобы.

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

Идентификатор сеанса
Если вы хотите поделиться идентификатором сеанса для нескольких доменов (может быть на одном и том же сервере или другим) и хотите использовать файлы cookie для переноса идентификатора сеанса, вам необходимо изменить настройки cookie идентификатора сеанса, чтобы файл cookie был действителен для обоих доменов , Но это возможно только в том случае, если оба домена имеют один и тот же домен верхнего уровня. Для www.example.com и jobs.example.com которые используют example.com , параметр $domain для session_set_cookie_params() должен быть установлен на .example.com .

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

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

Напишите свой собственный обработчик сеанса: http://de.php.net/manual/en/function.session-set-save-handler.php

Используйте центральную базу данных или сервер memcache.

Субдомены влияют только на ваш файл cookie, который должен быть установлен правильно (как в домене), чтобы сохранить идентификатор сеанса, перейдя с www. * На задания. *.

Для обеспечения безопасности сеанса вы можете использовать сервер memcache и использовать обработчик сеанса php_memcache . Вам не нужно писать собственный обработчик сеанса.