Подтвердить что ты не робот

Существуют ли ограничения для переменных сеанса?

Как гласит название, существуют ли ограничения (если они есть) для переменных сеанса или они считаются обычными переменными и могут хранить одинаковое количество данных?

Я смотрю, есть ли другие ограничения, кроме переменных типа, таких как максимальная длина, максимальные значения и т.д.

P.S. Если вопрос неясен, пожалуйста, дайте мне знать.

Спасибо заранее!

4b9b3361

Ответ 1

Как сказал @Thariama, нет предела числу переменных; Кроме того, нет ограничений на объем данных, которые вы можете сохранить в сеансе (я видел несколько десятков мегабайт).

По мере увеличения размера сеанса вы столкнетесь с различными причудами: PHP 5 десериализует весь сеанс в памяти в session_start() (используя обработчик сеанса по умолчанию - вы можете сделать ваше собственное решение, конечно); с сеансом 20 МБ и 50 одновременными пользователями, ваши сценарии начинают сильно ограничиваться скоростью доступа к диску (запуск a.k.a. "script медленный, как меласса" - только сеансы будут забивать ГБ ОЗУ); в конце концов, мы выделили ящик для хранения как можно большего количества сеансов в своей ОЗУ, а окна интерфейса доступа к ним через NFS (хотя это помогло и в нашем случае, это может быть излишним для вас).

Обратите внимание, что для многих одновременных пользователей и хранения сеансов на диске количество временных файлов сеанса может вызвать проблемы с ограничениями файловой системы (например, сколько файлов может находиться в одном каталоге перед запуском проблем с stat() производительность) или другие ограничения (мы однажды обнаружили, что жесткий диск был настроен так, чтобы одновременно разрешать 4096 открытых файлов). Все это не зависит от сеанса, но может быть вызвано обработкой сеанса.

Ответ 2

Нет, нет большого количества пространства, которое может иметь сеанс (или сколько переменных может иметь сеанс). Единственным ограничением является спецификация на вашем компьютере, это определяется вашим доступным memory_limit в вашем php.ini. Имейте в виду, что это пространство будет доступно для всех сеансов для всех пользователей.

Ответ 3

Это полностью специфично для вашего веб-сервера. Для Apache смотрите здесь:

http://httpd.apache.org/docs/trunk/mod/mod_session.html

Он даже позволяет сохранять сессии в базе данных, используя mod_session_dbd. Поэтому можно преодолеть физические ограничения, такие как 1 файл за сеанс. Кроме того, Apache может быть настроен для отслеживания каждого сеанса пользователя, хранящегося на определенном сервере или группе серверов, для обеспечения масштабируемости.

Ответ 4

Простой ответ - нет. (То есть у них больше нет ограничений, чем любая другая переменная PHP... должна вписываться в память и т.д.)

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