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

StackOverflow https://stackoverflow.com/questions/76712

Вопрос

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

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

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

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

Это было полезно?

Решение

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

Другие советы

Что бы вы ни делали, не сохраняйте это на самом сервере (даже если вы используете только один сервер или в сценарии отработки отказа 1 + 1).Это поставит вас в тупик.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top