HTTP является протоколом без сохранения состояния по причине. Сеансы сваривают состояние на HTTP. Как правило, избегайте использования состояния сеанса.
UPDATE:
На уровне HTTP нет понятия сеанса; серверы предоставляют это, предоставляя клиенту уникальный идентификатор и сообщая ему о необходимости повторной отправки при каждом запросе. Затем сервер использует этот идентификатор в качестве ключа в большой хэш-таблице объектов Session. Всякий раз, когда сервер получает запрос, он ищет информацию о сеансе в своей хэш-таблице объектов сеанса на основе идентификатора, предоставленного клиентом вместе с запросом. Вся эта дополнительная работа - двойной удар по масштабируемости (большая причина, по которой HTTP не сохраняет состояния).
- Whammy One: уменьшает работу, которую может выполнять один сервер.
- Whammy Two: его масштабировать становится сложнее, потому что теперь вы не можете просто перенаправить запрос на любой старый сервер - у них не все имеют одинаковый сеанс. Вы можете закрепить все запросы с данным идентификатором сеанса на одном сервере. Это не легко, и это единственная точка отказа (не для системы в целом, а для больших групп ваших пользователей). Или же вы можете совместно использовать хранилище сеансов для всех серверов в кластере, но теперь у вас больше сложностей: подключенная к сети память, автономный сервер сеансов и т. Д.
Учитывая все это, чем больше информации вы добавляете в сеанс, тем больше влияние на производительность (как указывает Винко). Также, как указывает Винко, если ваш объект не сериализуем, сеанс будет вести себя неправильно. Так что, как правило, избегайте внесения в сессию большего, чем необходимо.
@ Vinko Обычно вы можете обойти состояние хранилища сервера, внедрив данные, которые вы отслеживаете, в ответ, который вы отправляете обратно, и попросив клиента отправить его повторно, например, отправив данные в скрытый вход. Если вам действительно нужно отслеживание состояния на стороне сервера, вероятно, оно должно быть в вашем резервном хранилище данных.
(Винко добавляет: PHP может использовать базу данных для хранения информации о сеансе, а повторная отправка клиентом данных каждый раз может решить потенциальные проблемы с масштабируемостью, но открывает большой круг вопросов безопасности, на которые вы должны обратить внимание сейчас, когда клиент находится в контроль над всем вашим состоянием)