Настройка во время выполнения
Поведение этих функций зависит от установок в 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_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
определяет, будет ли модуль использовать 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_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
задает перезаписываемые теги 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")]. Подробнее об этом смотрите в главе "Отслеживание прогресса загрузки файлов с помощью сессий".