ОК, так что у меня есть совершенно редкий уникальный сценарий PHP-сайта с балансировкой нагрузки. Облом - это раньше не было с балансировкой нагрузки. Теперь у нас начинаются проблемы ...
В настоящее время единственная проблема связана с сессиями PHP. Естественно, никто не задумывался об этой проблеме вначале, поэтому конфигурация сеанса PHP оставалась с настройками по умолчанию. Таким образом, оба сервера имеют свой собственный небольшой набор файлов сеансов, и горе - это пользователь, который получает следующий запрос на другой сервер, потому что у него нет сеанса, который он создал на первом.
Теперь я читаю руководство по PHP, как решить эту ситуацию. Там я нашел замечательную функцию session_set_save_handler()
. (И, по совпадению, эта тема на SO) Аккуратно. За исключением того, что мне придется вызывать эту функцию на всех страницах сайта. И разработчики будущих страниц должны были бы не забывать называть это также все время. Чувствует себя немного неуклюже, не говоря уже о том, что, вероятно, нарушает дюжину лучших практик кодирования. Было бы гораздо приятнее, если бы я просто включил какой-нибудь глобальный параметр конфигурации и Voilà - все сеансы волшебным образом хранятся в БД, кеше памяти или чем-то подобном.
Есть идеи, как это сделать?
Добавлено: Для пояснения - я ожидаю, что это будет стандартная ситуация со стандартным решением. К вашему сведению - у меня есть MySQL DB. Конечно, должен быть какой-нибудь готовый к использованию код, который решает эту проблему? Конечно, я могу написать свой собственный материал для сохранения сеанса, и вариант
auto_prepend
, на который указывает
Грег , выглядит многообещающим, но это будет похоже на изобретение колеса. :П
Добавлено 2: Балансировка нагрузки основана на DNS. Я не уверен, как это работает, но я думаю, это должно быть что-то вроде
this .
Добавлено 3: ОК, я вижу, что одним из решений является использование опции
auto_prepend
для вставки вызова в
session_set_save_handler()
в каждом скрипте и записи моего собственного БД в персистентном виде, возможно, для вызова
memcached
для лучшая производительность. Достаточно справедливо.
Есть ли какой-нибудь способ, которым я мог бы избежать всего этого сам? Как какой-то известный и проверенный плагин PHP?
Добавлено намного, намного позже: В конце концов, я так и сделал: Как правильно реализовать сохранение персистентной сессии в PHP + MySQL?
Кроме того, я просто включил обработчик сеанса вручную на всех страницах.