PHP хранит информацию о сеансе в файловой системе хоста сервера, устанавливающего этот сеанс. В среде PHP с несколькими хостами, где нагрузка нераспределяется между каждым хостом, переменные сеанса PHP недоступны для каждого запроса (если только случайный запрос не назначен на тот же хост – предположим, что у нас нет контроля над балансировщиком нагрузки) ,
Этот сайт, получивший название «Справочник автостопом по балансировке нагрузки на PHP», предлагает переопределить обработчик сеанса PHP и хранить информацию сеанса в общей базе данных.
Что, по вашему скромному мнению, является наилучшим способом сохранить информацию о сеансе в среде с несколькими PHP-хостами?
ОБНОВЛЕНИЕ: Спасибо за отличную обратную связь. Для тех, кто ищет пример кода, мы нашли полезное руководство по написанию класса Session Manager для MySQL, который я рекомендую проверить.
База данных или База данных + Memcache. Вообще говоря, сеансы не следует писать очень часто. Начните с решения базы данных, которое записывает только в db, когда данные сеанса изменились . Memcache следует добавлять позже как повышение производительности. Решение db будет очень быстрым, потому что вы только всегда просматриваете первичные ключи. Убедитесь, что db имеет блокировку строки, а не блокировку таблицы (myISAM). MemCache – это плохая идея … Если он переполняется, сбой или перезапуск, пользователи будут выходить из системы.
Независимо от того, что вы делаете, не храните его на самом сервере (даже если вы используете только один сервер или в сценарии перехода на 1 + 1). Это поставит вас в тупик.
Я бы сказал, используйте Database + Memcache для хранения / извлечения, это удержит вас от понимания Зенда (и, поверьте, в какой-то момент у меня с Zend). Поскольку вы сможете легко разделять с помощью UserID или SessionID, даже если вы перейдете к MySQL, вы оставите вещи достаточно масштабируемыми.
(Edit: кроме того, переход с DB + Memcache не привязывает вас к коммерческой стороне, это не привязывает вас к PHP – то, что вам может понравиться в будущем)
Хранение данных сеанса в общем db работает, но может быть медленным. Если это действительно большой сайт, memcache , вероятно, лучший вариант.
В зависимости от бюджета вашего проекта вы также можете рассмотреть платформу Zend для своих производственных машин, которая помимо множества других замечательных функций включает настраиваемую кластеризацию сеансов, которая работает как CDN.