Как гласит название, существуют ли ограничения (если они есть) для переменных сеанса или они считаются обычными переменными и могут хранить одинаковое количество данных?
Я смотрю, есть ли другие ограничения, кроме переменных типа, таких как максимальная длина, максимальные значения и т. Д.
PS Если вопрос неясен, пожалуйста, дайте мне знать.
Заранее спасибо!
Как сказал @Thariama, нет предела количеству переменных; Кроме того, нет ограничений на объем данных, которые вы можете сохранить в сеансе (я видел несколько десятков мегабайт).
По мере увеличения размера сеанса вы столкнетесь с различными причудами: PHP 5 десериализует весь сеанс в памяти на session_start()
(используя обработчик сеанса по умолчанию – вы можете сделать свое решение , конечно); с сеансом 20 МБ и 50 одновременными пользователями, ваши скрипты начинают сильно ограничиваться скоростью доступа к диску (например, запуск скриптов медленный, как меласса) – только сеансы будут забивать ГБ ОЗУ); в конце концов, мы выделили коробку для хранения как можно большего количества сеансов в своей ОЗУ, а ящики с интерфейсом обратились к ним через NFS (хотя это помогло в нашем случае, это может быть излишним для вас).
Обратите внимание, что для многих одновременных пользователей и хранения сеанса на диске количество временных файлов сеанса может вызвать проблемы с ограничениями файловой системы (например, сколько файлов может находиться в одном каталоге, прежде чем вы столкнетесь с проблемами со stat()
) или другими ограничениями ( мы однажды нашли трудный способ, чтобы ящик был настроен, чтобы одновременно разрешить 4096 открытых файлов). Все это не зависит от сеанса, но может быть вызвано обработкой сеанса.
Нет, нет предела на большом пространстве, которое может иметь сеанс (или сколько переменных может иметь сеанс). Единственным ограничением является спецификация на вашем компьютере, это определяется вашим доступным memory_limit в вашем php.ini. Имейте в виду, что это пространство будет доступно для всех сеансов для всех пользователей.
Это совершенно специфично для вашего веб-сервера. Для Apache смотрите здесь:
http://httpd.apache.org/docs/trunk/mod/mod_session.html
Он даже позволяет сеансам хранить в базе данных с помощью mod_session_dbd . Поэтому можно преодолеть физические ограничения, такие как 1 файл за сеанс. Кроме того, Apache может быть настроен для отслеживания пользовательских сеансов, хранящихся на определенном сервере или группе серверов, для обеспечения масштабируемости.
Простой ответ – нет. (То есть, у них больше нет ограничений, чем любая другая переменная PHP … должна вписываться в память и т. Д.)
Однако имейте в виду, что данные $_SESSION
хранятся где-то, по умолчанию, как сериализованные данные в одном файле за сеанс. Таким образом, существуют практические ограничения. Вы не захотите хранить в них огромное количество информации, потому что они будут загружены / сохранены из хранилища данных на каждой странице, использующей session_start()
.