Аварийное переключение между сеансами репликации базы данных PHP - PullRequest
2 голосов
/ 29 апреля 2011

У меня есть 2 сервера для восстановления после отказа. База данных реплицируется (MySQL) как Master-Master, так что каждый сервер запускает копию полного стека. Я вижу, что таблица сеансов обновляется, когда я нахожусь на одном сервере, и после проверки запросов я вижу, что тот же PHPSESSID отправляется. Но когда я изменяю URL-адреса или переключаюсь на вторичный компьютер, мой сеанс прерывается, и я должен повторно войти в систему.

То же значение PHPSESSID отправляется на вторичный сервер, но сеанс не распознается. Apache / PHP связывает сессию с этим конкретным блоком? Если так, как я могу заставить их распознавать сеанс, который уже находится в базе данных?

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Примечание: Перемещено из «РЕДАКТИРОВАТЬ» к ответу, чтобы пометить его как отвеченное

Фактически найдено решение.«Проблема» - это исправление Suhosin для обеспечения безопасности установки PHP.Suhosin поддерживает настраиваемые параметры шифрования данных сеанса на основе ключа шифрования, а также DocRoot приложения, поскольку у отказоустойчивого сервера был другой DocRoot, не было никакой возможности чтения зашифрованных данных.

Я отредактировал suhosin.ini, чтобы добавить общий ключ шифрования, и отключил параметр шифрования DocRoot, и сеансы распределяются, как и ожидалось.

Решение с помощью: http://rommelsantor.com/clog/2011/02/06/php-shared-session-encoding-solution/

0 голосов
/ 29 апреля 2011

Если вы используете $_SESSION, то это связано с этим сервером.Вы должны использовать cookie для отслеживания идентификаторов сеансов, а затем сопоставить его с сеансом в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...