2010-11-25 2 views
51

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

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

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

Заранее благодарен!

ответ

50

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

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

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

15

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

+0

Вопрос не в том, сколько переменных сеанса у меня есть, но сколько данных каждый из них может хранить. – jolt 2010-11-25 08:26:44

8

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

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

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

+0

Вы можете написать собственные обработчики сеансов в PHP, чтобы сделать это, хотя скомпилированный модуль может быть более эффективным. – Piskvor 2010-11-25 08:33:30

+5

@shamittomar: Если нисходящий не оставил комментарий, они, вероятно, не оставят его, даже если вы спросите их. Для одиночных downvotes я бы не стал беспокоиться об этом - просто невидимый/случайный/привод-вниз. – Piskvor 2010-11-25 08:38:35

3

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

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