Поведение этих функций зависит от установок в 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 | "0" | PHP_INI_ALL | До PHP 7.2.0 значение по умолчанию было "" . |
session.cookie_httponly | "0" | PHP_INI_ALL | До PHP 7.2.0 значение по умолчанию было "" . |
session.cookie_samesite | "" | PHP_INI_ALL | Доступна с PHP 7.3.0. |
session.use_strict_mode | "0" | PHP_INI_ALL | |
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 | |
session.upload_progress.cleanup | "1" | PHP_INI_PERDIR | |
session.upload_progress.prefix | "upload_progress_" | PHP_INI_PERDIR | |
session.upload_progress.name | "PHP_SESSION_UPLOAD_PROGRESS" | PHP_INI_PERDIR | |
session.upload_progress.freq | "1%" | PHP_INI_PERDIR | |
session.upload_progress.min_freq | "1" | PHP_INI_PERDIR | |
session.lazy_write | "1" | PHP_INI_ALL | |
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 |
Система управления сессиями поддерживает ряд опций, которые могут быть указаны в файле 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
и 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).
По умолчанию значение 1440
(24 минуты).
Замечание: Если разные скрипты имеют разные значения
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. Указание
ненулевого значения в session.entropy_length
предписывает PHP
использовать в качестве источника энтропии Windows Random API.
Замечание: Удалено в PHP 7.1.0.
session.entropy_file
имеет значение по умолчанию равное/dev/urandom
или/dev/arandom
, если они доступны.
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
(включено).
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().
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.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_bits_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).
Возможно указать любой из алгоритмов,
предусмотренных модулем hash (если
он доступен), например, sha512
или
whirlpool
. Полный список алгоритмов может быть
получен с помощью функции hash_algos().
Замечание: Удалена в 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.upload_progress.cleanup
bool
Замечание: Строго рекомендуется не отключать эту опцию.
session.upload_progress.prefix
string
$_POST[ini_get("session.upload_progress.name")]
.
По умолчанию равен "upload_progress_".
session.upload_progress.name
string
$_POST[ini_get("session.upload_progress.name")]
не передан, прогресс загрузки данного файла не будет отслеживаться.
По умолчанию "PHP_SESSION_UPLOAD_PROGRESS".
session.upload_progress.freq
mixed
session.upload_progress.min_freq
int
session.lazy_write
bool
session.lazy_write
установлен в 1, то данные сессии
будут перезаписываться только при их изменении. По умолчанию 1, включено.
Прогресс загрузки файлов не будет обрабатываться, если не включена опция session.upload_progress.enabled и не установлена переменная $_POST[ini_get("session.upload_progress.name")]. Подробнее об этом смотрите в главе "Отслеживание прогресса загрузки файлов с помощью сессий".