Мой опыт показывает, что сеанс является хорошим средством управления состоянием, когда вы используете его надлежащим образом. Тем не менее, часто он используется неправильно, вызывая чувство «никогда не используй сеанс», разделяемое многими разработчиками.
Я и многие другие разработчики столкнулись с серьезными проблемами с производительностью, когда мы по ошибке использовали сеанс для хранения больших объемов данных из базы данных, чтобы "сохранить поездку". Это плохо. Хранение 2000 пользовательских записей за сеанс поставит веб-сервер на колени, когда более чем два пользователя используют приложение. Сессия не должна использоваться в качестве кэша базы данных.
Хранение целого числа, однако, для каждой сессии вполне приемлемо. Небольшие объемы данных, представляющие, как текущий пользователь использует ваше приложение (например, корзину), являются хорошим использованием состояния сеанса.
Для меня все дело в управлении государством. Если все сделано правильно, то сессия может быть одним из многих хороших способов управления состоянием. Тем не менее, в начале должно быть решено, как управлять состоянием. Чаще всего мы сталкиваемся с проблемами, когда кто-то решает просто «бросить что-то в сеанс».
Я нашел эту статью очень полезной при использовании внепроцессных режимов, и в ней содержатся некоторые советы, о которых я никогда бы не подумал самостоятельно. Например, вместо того, чтобы помечать класс как сериализуемый, хранение его примитивных членов типа данных в отдельных переменных сеанса и последующее воссоздание объекта может повысить производительность.