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


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

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

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

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

4 52

4 ответа:

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

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

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

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

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

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

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

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