Настройка во время выполнения
Поведение этих функций зависит от установок в php.ini.
| Имя | По умолчанию | Место изменения | Список изменений |
|---|---|---|---|
| session.save_path | "" | PHP_INI_ALL | |
| session.name | "PHPSESSID" | PHP_INI_ALL | |
| session.save_handler | "files" | PHP_INI_ALL | |
| session.auto_start | "0" | PHP_INI_PERDIR | |
| session.gc_probability | "1" | PHP_INI_ALL | |
| session.gc_divisor | "100" | PHP_INI_ALL | |
| session.gc_maxlifetime | "1440" | PHP_INI_ALL | |
| session.serialize_handler | "php" | PHP_INI_ALL | |
| session.cookie_lifetime | "0" | PHP_INI_ALL | |
| session.cookie_path | "/" | PHP_INI_ALL | |
| session.cookie_domain | "" | PHP_INI_ALL | |
| session.cookie_secure | "" | PHP_INI_ALL | |
| session.cookie_httponly | "" | PHP_INI_ALL | Доступна с PHP 5.2.0. |
| session.cookie_samesite | "" | PHP_INI_ALL | Доступна с PHP 7.3.0. |
| session.use_strict_mode | "0" | PHP_INI_ALL | Доступна с PHP 5.5.2. |
| session.use_cookies | "1" | PHP_INI_ALL | |
| session.use_only_cookies | "1" | PHP_INI_ALL | |
| session.referer_check | "" | PHP_INI_ALL | |
| session.cache_limiter | "nocache" | PHP_INI_ALL | |
| session.cache_expire | "180" | PHP_INI_ALL | |
| session.use_trans_sid | "0" | PHP_INI_ALL | |
| session.trans_sid_tags | "a=href,area=href,frame=src,form=" | PHP_INI_ALL | Доступна с PHP 7.1.0. |
| session.trans_sid_hosts | $_SERVER['HTTP_HOST'] |
PHP_INI_ALL | Доступна с PHP 7.1.0. |
| session.sid_length | "32" | PHP_INI_ALL | Доступна с PHP 7.1.0. |
| session.sid_bits_per_character | "4" | PHP_INI_ALL | Доступна с PHP 7.1.0. |
| session.upload_progress.enabled | "1" | PHP_INI_PERDIR | Доступна с PHP 5.4.0. |
| session.upload_progress.cleanup | "1" | PHP_INI_PERDIR | Доступна с PHP 5.4.0. |
| session.upload_progress.prefix | "upload_progress_" | PHP_INI_PERDIR | Доступна с 5.4.0. |
| session.upload_progress.name | "PHP_SESSION_UPLOAD_PROGRESS" | PHP_INI_PERDIR | Доступна с PHP 5.4.0. |
| session.upload_progress.freq | "1%" | PHP_INI_PERDIR | Доступна с 5.4.0. |
| session.upload_progress.min_freq | "1" | PHP_INI_PERDIR | Доступна с PHP 5.4.0. |
| session.lazy_write | "1" | PHP_INI_ALL | Доступна с PHP 7.0.0. |
| url_rewriter.tags | "a=href,area=href,frame=src,form=" | PHP_INI_ALL | Доступно с PHP 7.1.0, но данная INI-настройка не используется сессиями |
| session.hash_function | "0" | PHP_INI_ALL | Удалена в PHP 7.1.0. |
| session.hash_bits_per_character | "4" | PHP_INI_ALL | Удалена в PHP 7.1.0. |
| session.entropy_file | "" | PHP_INI_ALL | Удалена в PHP 7.1.0. |
| session.entropy_length | "0" | PHP_INI_ALL | Удалена в PHP 7.1.0 |
| session.bug_compat_42 | "1" | PHP_INI_ALL | Удалена в PHP 5.4.0. |
| session.bug_compat_warn | "1" | PHP_INI_ALL | Удалена в PHP 5.4.0. |
Система управления сессиями поддерживает ряд опций, которые могут быть указаны в файле php.ini. Ниже приводится краткий обзор.
-
session.save_handlerstring -
session.save_handlerопределяет имя обработчика, который используется для хранения и извлечения данных, связанных с сессией. По умолчанию имеет значениеfiles. Следует обратить внимание, что некоторые расширения могут зарегистрировать собственные обработчики (save_handler). Текущие зарегистрированные обработчики отображаются в phpinfo(). См. также session_set_save_handler(). -
session.save_pathstring -
session.save_pathопределяет аргумент, который передается в обработчик сохранения. При установленном по умолчанию обработчике files, аргумент содержит путь, где будут создаваться файлы. См. также session_save_path().У этой директивы также существует дополнительный аргумент
N, определяющий глубину размещения файлов сессии относительно указанной директории. Например, указание'5;/tmp'может в конечном итоге привести к такому размещению файла сессии:/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If. Для того, чтобы использовать аргументN, необходимо предварительно создать все эти директории. Помочь в этом может небольшой скрипт, расположенный в ext/session. Версия для bash называется mod_files.sh, а Windows-версия - mod_files.bat. Также следует учитывать, что еслиNопределен и больше 0, то автоматическая сборка мусора не выполняется, подробнее см. информацию в файле php.ini. Кроме того, если используетсяN, необходимо удостовериться, что значениеsession.save_pathуказано в кавычках, поскольку разделитель (;) в php.ini используется как знак комментария.Модуль хранения файлов создает файлы с правами 600 по умолчанию. Это можно изменить с помощью необязательного аргумента
MODE:N;MODE;/path, гдеMODE- восьмеричное представление режима доступа к файлу. УстановкаMODEне затрагивает umask.ВниманиеЕсли установить в качестве значения общедоступную для чтения директорию, например, /tmp (по умолчанию), остальные пользователи сервера получат возможность перехватить сессию пользователя, получив список файлов такой директории.
ПредостережениеПри использовании необязательного аргумента
Nуровня директорий, как описано выше, учтите, что использование значений выше чем 1 или 2 недопустимо для большинства сайтов, так как требуется очень большое количество директорий: например, значение 3 приводит к(2 ** session.sid_bits_per_character) ** 3директориям в файловой системе, которые приводят к огромным потерям места и inode.Используйте только
Nбольше 2, если вы абсолютно уверены, что ваш сайт достаточно велик, чтобы требовать это. -
session.namestring -
session.nameопределяет название сессии, используемое как название cookies. Может содержать только цифры и буквы. По умолчанию равноPHPSESSID. Смотрите также session_name(). -
session.auto_startbool -
session.auto_startопределяет, будет ли модуль сессии запускать сессию автоматически при старте. Значение по умолчанию0(отключено). -
session.serialize_handlerstring -
session.serialize_handlerопределяет имя обработчика, который используется для сериализации/десериализации данных. Поддерживаются формат сериализации PHP (наименованиеphp_serialize), внутренний формат PHP (наименованиеphpиphp_binary) и WDDX (наименованиеwddx). WDDX доступен только в том случае, если PHP скомпилирован с поддержкой WDDX.php_serializeдоступен с версии PHP 5.5.4.php_serializeиспользует простую функцию сериализации/десериализации для внутренних нужд и не имеет тех ограничений, какие есть уphpиphp_binary. Старые обработчики сериализации не могут хранить ни числовые, ни строковые индексы, содержащие специальные символы (|и!) в $_SESSION. Используйтеphp_serialize, чтобы обойти ошибки числовых и строковых индексов при завершении скрипта. Значение по умолчаниюphp. -
session.gc_probabilityint -
session.gc_probabilityв сочетании сsession.gc_divisorопределяет вероятность запуска функции сборщика мусора (gc, garbage collection). По умолчанию равен1. См. подробнее в session.gc_divisor. -
session.gc_divisorint -
session.gc_divisorв сочетании сsession.gc_probabilityопределяет вероятность запуска функции сборщика мусора (gc, garbage collection) при каждой инициализации сессии. Вероятность рассчитывается как gc_probability/gc_divisor, то есть 1/100 означает, что функция gc запускается в одном случае из ста, или 1% при каждом запросе.session.gc_divisorпо умолчанию имеет значение100. -
session.gc_maxlifetimeint -
session.gc_maxlifetimeзадает отсрочку времени в секундах, после которой данные будут рассматриваться как "мусор" и потенциально будут удалены. Сбор мусора может произойти в течение старта сессии (в зависимости от значений session.gc_probability и session.gc_divisor).Замечание: Если разные скрипты имеют разные значения
session.gc_maxlifetime, но при этом одни и те же места для хранения данных сессии, то скрипт с минимальным значением уничтожит все данные. В таком случае следует использовать эту директиву вместе с session.save_path. -
session.referer_checkstring -
session.referer_checkсодержит подстроку, которую можно использовать при проверке HTTP Referer. Если клиентом был послан referer и подстрока не была выявлена, то идентификатор сессии будет помечен как недействительный. По умолчанию используется пустая строка. -
session.entropy_filestring -
session.entropy_fileсодержит путь к ресурсу (файлу), используемому как дополнительный источник энтропии в процессе создания идентификатора сессии. Например,/dev/randomили/dev/urandom, которые доступны на многих Unix-системах. Эта возможность также поддерживается в Windows начиная с версии PHP 5.3.3. Указание ненулевого значения вsession.entropy_lengthпредписывает PHP использовать в качестве источника энтропии Windows Random API.Замечание: Удалено в PHP 7.1.0. Начиная с PHP 5.4.0
session.entropy_fileимеет значение по умолчанию равное/dev/urandomили/dev/arandom, если они доступны. В PHP 5.3.0 эта директива по умолчанию пуста. -
session.entropy_lengthint -
session.entropy_lengthопределяет количество байт, которые будут прочитаны из вышеуказанного файла. По умолчанию32. Удалено в PHP 7.1.0. -
session.use_strict_modebool -
session.use_strict_modeопределяет будет ли модуль использовать режим строгого идентификатора (ID). Если от браузера получен неопределенный ID, то браузеру будет отправлен новый ID. Таким образом приложения защищаются от фиксации сессии с помощью строгого режима. По умолчанию0(отключено).Замечание: Включение
session.use_strict_modeявляется обязательным для общей безопасности сессии. Всем сайтам рекомендуется ее включать. Смотрите примеры session_create_id().ВниманиеЕсли пользовательский обработчик сессии, зарегистрированный с помощью session_set_save_handler(), не реализует SessionUpdateTimestampHandlerInterface::validateId() и не предоставляет callback-функцию
validate_sid, соответственно, режим строгого идентификатора сессии будет отключен, независимо от значения этой директивы. Особо обратите внимание, что SessionHandler не реализует SessionHandler::validateId(). -
session.use_cookiesопределяет, будет ли модуль использовать cookies для хранения идентификатора сессии на стороне клиента. По умолчанию1(включено). -
session.use_only_cookiesопределяет, будет ли модуль использовать только cookies для хранения идентификатора сессии на стороне клиента. Включение этого параметра предотвращает атаки с использованием идентификатора сессии, размещенного в URL. Значение по умолчанию1(включено) с версии PHP 5.3.0. -
session.cookie_lifetimeуказывает время жизни cookies, отправляемого в браузер клиента, в секундах. Значение 0 означает, что cookies будут валидны до закрытия браузера. По умолчанию равно0. См. также session_get_cookie_params() и session_set_cookie_params().Замечание: Отметка окончания времени устанавливается по отношению к серверному времени, которое не обязательно совпадает с временем в браузере клиента.
-
session.cookie_pathопределяет устанавливаемый путь в сессионной cookie. По умолчанию/. См. также session_get_cookie_params() и session_set_cookie_params(). -
session.cookie_domainопределяет устанавливаемый домен в сессионной cookie. В соответствии со спецификацией нет смысла дополнительно указывать имя хоста, который сгенерировал cookies. См. также session_get_cookie_params() и session_set_cookie_params(). -
session.cookie_secureуказывает, должны ли cookies передаваться только через защищенное соединение. По умолчаниюoff. См. также session_get_cookie_params() и session_set_cookie_params(). - Отметка, согласно которой доступ к cookie с идентификатором сессии может быть получен только через HTTP-протокол. Это означает, что cookie не будет доступна через скриптовые языки, такие как JavaScript. Данная настройка позволяет эффективно защитить от XSS-атак (к сожалению, эта функция поддерживается не всеми браузерами).
-
Позволяет серверам утверждать, что cookie не должен отправляться вместе
с межсайтовыми запросами. Это утверждение позволяет браузерам пользователей снизить риск
утечки информации из разных источников и обеспечивает определенную защиту от подделки
кроссдоменных запросов. Обратите внимание, что это поддерживается не всеми браузерами.
Пустое значение означает, что атрибут cookie сайта не будет установлен.
LaxиStrictозначают, что cookie не будет отправлено для кроссдоменных POST-запросов;Laxотправит cookie для междоменных GET-запросов, аStrictне будет делать этого. -
session.cache_limiterstring -
session.cache_limiterопределяет режим кеширования, используемого для страниц сессий. Может принимать одно из следующих значений:nocache,private,private_no_expireилиpublic. По умолчаниюnocache. Подробнее о данных значениях смотрите в session_cache_limiter(). -
session.cache_expireint -
session.cache_expireуказывает время жизни кешированных страниц сессий в минутах, это никак не влияет на ограничитель nocache. По умолчанию180. См. также session_cache_expire(). -
session.use_trans_sidbool -
session.use_trans_sidуказывает, используется ли прозрачная поддержка sid или нет. По умолчанию0(отключено).Замечание: Управление сессией на основе URL имеет дополнительные риски безопасности по сравнению с управлением на основе cookies. В качестве примера можно упомянуть такие ситуации, когда пользователи могут отправить URL, содержащий идентификатор активной сессии, своим друзьям по электронной почте или сохранить ссылку с идентификатором в закладках и все время посещать сайт с одним и тем же идентификатором. Начиная с PHP 7.1.0, полный путь URL, то есть https://php.net/, обрабатывается "trans sid". Раньше PHP обрабатывал только относительный URL-адреса. Перезапись целевого хоста задается session.trans_sid_hosts.
-
session.trans_sid_tagsзадает перезаписываемые теги HTML для включения идентификатора сессии когда включена поддержка прозрачных "sid". По умолчаниюa=href,area=href,frame=src,input=src,form=form- специальных тег.<input hidden="session_id" name="session_name">добавляется в форму.Замечание: До PHP 7.1.0 для этого использовался url_rewriter.tags. С PHP 7.1.0,
fieldsetбольше не считается за специальный тег. -
session.trans_sid_hostsstring -
session.trans_sid_hostsзадает, какие хосты будут перезаписаны для включения идентификатора сессии, когда включена поддержка прозрачных "sid". По умолчанию$_SERVER['HTTP_HOST']. Несколько хостов можно указать через запятую. Не допускается вставлять пробелы между хостами. Так правильно:php.net,wiki.php.net,bugs.php.net. -
session.bug_compat_42bool -
PHP версии 4.2.3 и более ранние имеют недокументированную особенность/ошибку,
позволяющую инициализировать переменную сессии как
глобальную при отключенной директиве
register_globals.
PHP 4.3.0 и более поздние предупреждают, если используется эта особенность и
включена опция
session.bug_compat_warn. Эта особенность/ошибка
может быть отключена при отключении данной директивы.
Замечание: Удалено в PHP 5.4.0.
-
session.bug_compat_warnbool -
PHP версии 4.2.3 и более ранние имеют недокументированную особенность/ошибку,
позволяющую инициализировать переменную сессии как
глобальную, при отключенной директиве
register_globals.
PHP 4.3.0 и более поздние предупреждают, если используется эта особенность
при помощи включения директив
session.bug_compat_42
и
session.bug_compat_warn.
Замечание: Удалено в PHP 5.4.0.
-
session.sid_lengthint -
session.sid_lengthпозволяет указать длину идентификатора сессии. Это значение должно быть в диапазоне 22-256. По умолчанию 32. Если вам нужна совместимость, указывайте 32, 40 и т.д. Более длинные идентификаторы сложнее подобрать. Рекомендуется использовать длину не менее 32.ПодсказкаЗаметки по совместимости: Используйте 32 для
session.hash_function=0 (MD5) иsession.hash_bits_per_character=4,session.hash_function=1 (SHA1) иsession.hash_bits_per_character=6. 26 дляsession.hash_function=0 (MD5) иsession.hash_bits_per_character=5. 22 дляsession.hash_function=0 (MD5) иsession.hash_bits_per_character=6. Вы должны сконфигурировать INI-настройки таким образом, чтобы идентификатор сессии состоял как минимум из 128 бит. Не забудьте задать соответствующие значения дляsession.sid_bits_per_character, иначе ваши идентификаторы будут слабыми.Замечание: Эта настройка появилась в PHP 7.1.0.
-
session.sid_bits_per_characterint -
session.sid_per_characterпозволяет задать количество бит в одном символе идентификатора сессии. Доступные значения '4' (0-9, a-f), '5' (0-9, a-v), и '6' (0-9, a-z, A-Z, "-", ","). По умолчанию 4. Чем больше бит, тем сильнее идентификатор сессии. В большинстве окружений рекомендуется 5.Замечание: Эта настройка появилась в PHP 7.1.0.
-
session.hash_functionmixed -
session.hash_functionпозволяет указать алгоритм хеширования, используемый для генерации идентификатора сессии. '0' означает MD5 (128 bits), а '1' означает SHA-1 (160 bits).Начиная с PHP 5.3.0 также стало возможным указать любой из алгоритмов, предусмотренных расширением hash (если оно доступно), например
sha512илиwhirlpool. Полный список алгоритмов может быть получен с помощью функции hash_algos().Замечание: Эта опция была добавлена в PHP 5. Удалена в PHP 7.1.0.
-
session.hash_bits_per_characterint -
session.hash_bits_per_characterпозволяет указать сколько бит хранится в каждом символе при преобразовании бинарного представления во что-либо более удобочитаемое. Возможные значения: '4' (0-9, a-f), '5' (0-9, a-v) и '6' (0-9, a-z, A-Z, "-", ",").Замечание: Удалена в PHP 7.1.0.
-
session.upload_progress.enabledbool - Включает отслеживание прогресса загрузки файлов и заполнение соответствующей переменной в массиве $_SESSION. По умолчанию 1, включено.
-
session.upload_progress.cleanupbool -
Чистка информации о прогрессе загрузки файлов по завершении
обработки POST-данных (то есть когда загрузка завершена).
По умолчанию 1, включено.
Замечание: Строго рекомендуется не отключать эту опцию.
-
session.upload_progress.prefixstring -
Префикс, используемый для ключа прогресса загрузки в массиве $_SESSION.
Для обеспечения уникальности данный ключ будет присоединен к значению
$_POST[ini_get("session.upload_progress.name")]. По умолчанию равен "upload_progress_". -
session.upload_progress.namestring -
Имя ключа, используемого в массиве $_SESSION, для хранения
информации о прогрессе. См. также директиву
session.upload_progress.prefix.
Если элемент
$_POST[ini_get("session.upload_progress.name")]не передан, прогресс загрузки данного файла не будет отслеживаться. По умолчанию "PHP_SESSION_UPLOAD_PROGRESS". -
session.upload_progress.freqmixed - Определяет частоту обновления информации о прогрессе загрузки. Можно указать значение в байтах (то есть "обновлять информацию о прогрессе каждые 100 байт") или в процентах (то есть "обновлять информацию о прогрессе после получения 1% данных от размера файла"). По умолчанию "1%".
-
session.upload_progress.min_freqint - Минимальная задержка между обновлениями, в секундах. По умолчанию "1" (одна секунда).
-
session.lazy_writebool -
Если
session.lazy_writeустановлен в 1, то при изменении данных сессии они будут только перезаписываться. По умолчанию 1, включено.
Настройки register_globals
влияют на способ хранения и использования переменных сессии.
Прогресс загрузки файлов не будет обрабатываться, если не включена опция session.upload_progress.enabled и не установлена переменная $_POST[ini_get("session.upload_progress.name")]. Подробнее об этом смотрите в главе "Отслеживание прогресса загрузки файлов с помощью сессий".