PHP-сессии для работы с несколькими серверами - PullRequest
5 голосов
/ 14 августа 2010

Все,

У меня есть веб-приложение на PHP5, написанное на Zend Framework и MVC.Это приложение установлено на 2 сервера с одинаковыми настройками.Сервер X имеет php5 / MySql / Apache и Сервер Y также имеют то же самое.У нас нет общего сервера БД между обоими серверами.

Мое приложение работает при индивидуальном доступе через https на сервере X и сервере Y. Но когда мы включаем балансировку нагрузки и включаем оба сервера, сеансызаблудиться.

Как я могу убедиться, что мои сеансы сохраняются на серверах?Должен ли я поддерживать свою базу данных на третьем сервере и записывать сеансы на него?ЕСЛИ так, какой самый простой и безопасный способ сделать это?

Спасибо

Ответы [ 3 ]

7 голосов
/ 14 августа 2010

memcached - популярный способ решения этой проблемы. Вам просто нужно запустить его (легко) и обновить файл php.ini, чтобы он использовал memcached в качестве хранилища сессии.

В php.ini вы бы изменили:

session.save_handler = memcache
session.save_path = ""

Для общей идеи: PHP сессий в Memcached .

Существует множество руководств по настройке обработчика сеанса Zend для работы с memcached. Выбирай.

0 голосов
/ 14 августа 2010

Другим вариантом является использование функции закрепления сессий на вашем балансировщике нагрузки. Это будет держать пользователей на определенных серверах. Поэтому, когда пользователь 1 заходит на сайт, он будет направлен на сервер X. Каждый последующий запрос будет также направлен на сервер X. Это позволяет вам не беспокоиться о сохраняющихся сеансах между серверами, поскольку каждый пользователь будет продолжать направляться сервер, на котором у них есть сеанс.

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

0 голосов
/ 14 августа 2010

Должен ли я поддерживать свой БД на третьем сервер и запись сеансов на него?

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

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