Подтвердить что ты не робот

Каков наилучший способ обработки сеансов для PHP-сайта на нескольких хостах?

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

Этот сайт, получивший название "Справочник автосторов по балансировке нагрузки на PHP" , предлагает переопределить обработчик сеанса PHP и хранить информацию сеанса в общей базе данных.

Что, по вашему скромному мнению, является наилучшим способом поддерживать информацию о сеансе в среде с несколькими PHP-хостами?

ОБНОВЛЕНИЕ: Спасибо за отличную обратную связь. Для тех, кто ищет пример кода, мы нашли полезное руководство по написанию класса Session Manager для MySQL которое я рекомендую проверить.

4b9b3361

Ответ 1

База данных или База данных + Memcache. Вообще говоря, сеансы не следует писать очень часто. Начните с решения базы данных, которое записывает только в db, когда данные сеанса изменились. Memcache следует добавлять позже как повышение производительности. Решение db будет очень быстрым, потому что вы только всегда просматриваете первичные ключи. Убедитесь, что db имеет блокировку строки, а не блокировку таблицы (myISAM). MemCache - это плохая идея... Если он переполняется, сбой или перезапуск, пользователи будут выходить из системы.

Ответ 2

Независимо от того, что вы делаете, не храните его на самом сервере (даже если вы используете только один сервер или в сценарии перехода на 1 + 1). Это поставит вас в тупик.

Я бы сказал, используйте Database + Memcache для хранения/извлечения, он будет держать вас в стороне от понимания Зенда (и, поверьте, в какой-то момент все происходит с Zend). Поскольку вы сможете легко разделить на UserID или SessionID, даже если вы перейдете к MySQL, вы оставите вещи достаточно масштабируемыми.

(Edit: кроме того, переход с помощью DB + Memcache не привязывает вас к коммерческой стороне, он также не привязывает вас к PHP - то, что вам может понравиться в будущем)

Ответ 3

Сохранение данных сеанса в общем db работает, но может быть медленным. Если это действительно большой сайт, memcache, вероятно, лучший вариант.

Ответ 4

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