Настройка во время выполнения

Поведение этих функций зависит от установок в 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_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.

Система управления сессиями поддерживает ряд опций, которые могут быть указаны в файле php.ini. Ниже приводится краткий обзор.

session.save_handler string
session.save_handler определяет имя обработчика, который используется для хранения и извлечения данных, связанных с сессией. По умолчанию имеет значение files. Следует обратить внимание, что некоторые расширения могут зарегистрировать собственные обработчики (save_handler). Текущие зарегистрированные обработчики отображаются в phpinfo(). См. также session_set_save_handler().
session.save_path string
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.name string
session.name определяет название сессии, используемое как название cookies. Может содержать только цифры и буквы. По умолчанию равно PHPSESSID. Смотрите также session_name().
session.auto_start bool
session.auto_start определяет, будет ли модуль сессии запускать сессию автоматически при старте. Значение по умолчанию 0 (отключено).
session.serialize_handler string
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_probability int
session.gc_probability в сочетании с session.gc_divisor определяет вероятность запуска функции сборщика мусора (gc, garbage collection). По умолчанию равен 1. См. подробнее в session.gc_divisor.
session.gc_divisor int
session.gc_divisor в сочетании с session.gc_probability определяет вероятность запуска функции сборщика мусора (gc, garbage collection) при каждой инициализации сессии. Вероятность рассчитывается как gc_probability/gc_divisor, то есть 1/100 означает, что функция gc запускается в одном случае из ста, или 1% при каждом запросе. session.gc_divisor по умолчанию имеет значение 100.
session.gc_maxlifetime int
session.gc_maxlifetime задает отсрочку времени в секундах, после которой данные будут рассматриваться как "мусор" и потенциально будут удалены. Сбор мусора может произойти в течение старта сессии (в зависимости от значений session.gc_probability и session.gc_divisor).

Замечание: Если разные скрипты имеют разные значения session.gc_maxlifetime, но при этом одни и те же места для хранения данных сессии, то скрипт с минимальным значением уничтожит все данные. В таком случае следует использовать эту директиву вместе с session.save_path.

session.referer_check string
session.referer_check содержит подстроку, которую можно использовать при проверке HTTP Referer. Если клиентом был послан referer и подстрока не была выявлена, то идентификатор сессии будет помечен как недействительный. По умолчанию используется пустая строка.
session.entropy_file string
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_length int
session.entropy_length определяет количество байт, которые будут прочитаны из вышеуказанного файла. По умолчанию 32. Удалено в PHP 7.1.0.
session.use_strict_mode bool
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 bool
session.use_cookies определяет, будет ли модуль использовать cookies для хранения идентификатора сессии на стороне клиента. По умолчанию 1 (включено).
session.use_only_cookies bool
session.use_only_cookies определяет, будет ли модуль использовать только cookies для хранения идентификатора сессии на стороне клиента. Включение этого параметра предотвращает атаки с использованием идентификатора сессии, размещенного в URL. Значение по умолчанию 1 (включено) с версии PHP 5.3.0.
session.cookie_lifetime int
session.cookie_lifetime указывает время жизни cookies, отправляемого в браузер клиента, в секундах. Значение 0 означает, что cookies будут валидны до закрытия браузера. По умолчанию равно 0. См. также session_get_cookie_params() и session_set_cookie_params().

Замечание: Отметка окончания времени устанавливается по отношению к серверному времени, которое не обязательно совпадает с временем в браузере клиента.

session.cookie_path string
session.cookie_path определяет устанавливаемый путь в сессионной cookie. По умолчанию /. См. также session_get_cookie_params() и session_set_cookie_params().
session.cookie_domain string
session.cookie_domain определяет устанавливаемый домен в сессионной cookie. В соответствии со спецификацией нет смысла дополнительно указывать имя хоста, который сгенерировал cookies. См. также session_get_cookie_params() и session_set_cookie_params().
session.cookie_secure bool
session.cookie_secure указывает, должны ли cookies передаваться только через защищенное соединение. По умолчанию off. См. также session_get_cookie_params() и session_set_cookie_params().
session.cookie_httponly bool
Отметка, согласно которой доступ к cookie с идентификатором сессии может быть получен только через HTTP-протокол. Это означает, что cookie не будет доступна через скриптовые языки, такие как JavaScript. Данная настройка позволяет эффективно защитить от XSS-атак (к сожалению, эта функция поддерживается не всеми браузерами).
session.cookie_samesite string
Позволяет серверам утверждать, что cookie не должен отправляться вместе с межсайтовыми запросами. Это утверждение позволяет браузерам пользователей снизить риск утечки информации из разных источников и обеспечивает определенную защиту от подделки кроссдоменных запросов. Обратите внимание, что это поддерживается не всеми браузерами. Пустое значение означает, что атрибут cookie сайта не будет установлен. Lax и Strict означают, что cookie не будет отправлено для кроссдоменных POST-запросов; Lax отправит cookie для междоменных GET-запросов, а Strict не будет делать этого.
session.cache_limiter string
session.cache_limiter определяет режим кеширования, используемого для страниц сессий. Может принимать одно из следующих значений: nocache, private, private_no_expire или public. По умолчанию nocache. Подробнее о данных значениях смотрите в session_cache_limiter().
session.cache_expire int
session.cache_expire указывает время жизни кешированных страниц сессий в минутах, это никак не влияет на ограничитель nocache. По умолчанию 180. См. также session_cache_expire().
session.use_trans_sid bool
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 string
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_hosts string
session.trans_sid_hosts задает, какие хосты будут перезаписаны для включения идентификатора сессии, когда включена поддержка прозрачных "sid". По умолчанию $_SERVER['HTTP_HOST']. Несколько хостов можно указать через запятую. Не допускается вставлять пробелы между хостами. Так правильно: php.net,wiki.php.net,bugs.php.net.
session.bug_compat_42 bool
PHP версии 4.2.3 и более ранние имеют недокументированную особенность/ошибку, позволяющую инициализировать переменную сессии как глобальную при отключенной директиве register_globals. PHP 4.3.0 и более поздние предупреждают, если используется эта особенность и включена опция session.bug_compat_warn. Эта особенность/ошибка может быть отключена при отключении данной директивы.

Замечание: Удалено в PHP 5.4.0.

session.bug_compat_warn bool
PHP версии 4.2.3 и более ранние имеют недокументированную особенность/ошибку, позволяющую инициализировать переменную сессии как глобальную, при отключенной директиве register_globals. PHP 4.3.0 и более поздние предупреждают, если используется эта особенность при помощи включения директив session.bug_compat_42 и session.bug_compat_warn.

Замечание: Удалено в PHP 5.4.0.

session.sid_length int
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_character int
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_function mixed
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_character int
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.enabled bool
Включает отслеживание прогресса загрузки файлов и заполнение соответствующей переменной в массиве $_SESSION. По умолчанию 1, включено.
session.upload_progress.cleanup bool
Чистка информации о прогрессе загрузки файлов по завершении обработки POST-данных (то есть когда загрузка завершена). По умолчанию 1, включено.

Замечание: Строго рекомендуется не отключать эту опцию.

session.upload_progress.prefix string
Префикс, используемый для ключа прогресса загрузки в массиве $_SESSION. Для обеспечения уникальности данный ключ будет присоединен к значению $_POST[ini_get("session.upload_progress.name")]. По умолчанию равен "upload_progress_".
session.upload_progress.name string
Имя ключа, используемого в массиве $_SESSION, для хранения информации о прогрессе. См. также директиву session.upload_progress.prefix. Если элемент $_POST[ini_get("session.upload_progress.name")] не передан, прогресс загрузки данного файла не будет отслеживаться. По умолчанию "PHP_SESSION_UPLOAD_PROGRESS".
session.upload_progress.freq mixed
Определяет частоту обновления информации о прогрессе загрузки. Можно указать значение в байтах (то есть "обновлять информацию о прогрессе каждые 100 байт") или в процентах (то есть "обновлять информацию о прогрессе после получения 1% данных от размера файла"). По умолчанию "1%".
session.upload_progress.min_freq int
Минимальная задержка между обновлениями, в секундах. По умолчанию "1" (одна секунда).
session.lazy_write bool
Если session.lazy_write установлен в 1, то при изменении данных сессии они будут только перезаписываться. По умолчанию 1, включено.

Настройки register_globals влияют на способ хранения и использования переменных сессии.

Прогресс загрузки файлов не будет обрабатываться, если не включена опция session.upload_progress.enabled и не установлена переменная $_POST[ini_get("session.upload_progress.name")]. Подробнее об этом смотрите в главе "Отслеживание прогресса загрузки файлов с помощью сессий".