session_gc
(PHP 7 >= 7.1.0, PHP 8)
session_gc — Собирает мусорные данные сессии
Описание
По умолчанию PHP использует session.gc_probability
для запуска сборщика мусора сессий на основе вероятности при каждом запросе.
У этого подхода есть ограничения:
- Данные сессий на сайтах с низкой посещаемостью могут не удаляться в течение предпочтительного периода времени.
- На сайтах с высокой посещаемостью сборщик мусора может запускаться слишком часто, выполняя ненужную дополнительную работу.
- Сбор мусора выполняется по запросу пользователя, и пользователь может столкнуться с задержкой.
Для производственных систем рекомендуется отключить сборку мусора на основе вероятности,
установив значение session.gc_probability
равным 0 и явно запускать сборщик мусора периодически, например,
с помощью «cron» в UNIX-подобных системах для запуска скрипта,
который вызывает функцию session_gc().
Замечание:
При вызове функции session_gc() из PHP-скрипта в командной строке,
session.save_path должен быть установлен на то же значение,
что и для веб-запросов, а скрипт должен иметь права доступа и удаления для файлов сессии.
На это могут влиять пользователь, от имени которого запускается скрипт,
а также функции контейнера или песочницы,
такие как опция PrivateTmp= systemd.
option.
Список параметров
Сигнатура функции не содержит параметров.
Возвращаемые значения
В случае успешного выполнения функция session_gc() возвращает
количество данных сессии, которые она удалила, или false, если возникла ошибка.
Замечание:
Старые обработчики сохранения сессии не возвращают количество удалённых данных сессии,
а только флаг успеха или неудачи. В этом случае количество удалённых данных сессии
становится равным 1 независимо от фактического количества данных, которые удалила функция.
Примеры
Пример #1
Пример использования функции session_gc()
в скрипте, который запускает диспетчер задач наподобие cron
<?php
// Примечание: Скрипт требуется запускать от имени того же пользователя, который запустил процесс веб-сервера
// Для инициализации доступа к хранилищу данных сессии требуется активная сессия
session_start();
// Запуск немедленной сборки мусора
session_gc();
// Очистка идентификатора сессии, который создан функцией session_start()
session_destroy();
?>
Пример #2
Пример сборки сессионного мусора функцией session_gc()
в доступном пользователю скрипте
<?php
// Примечание: рекомендуется вызывать функцию session_gc() в скрипте, который запускает диспетчер задач,
// но можно вызывать и в пользовательском скрипте
// Проверяем время последней сборки мусора
$gc_time = '/tmp/php_session_last_gc';
$gc_period = 1800;
session_start();
// Собираем мусор только когда закончился период сборки мусора,
// поскольку вызов функции session_gc() при каждом запросе напрасно расходует ресурсы
if (file_exists($gc_time)) {
if (filemtime($gc_time) < time() - $gc_period) {
session_gc();
touch($gc_time);
}
} else {
touch($gc_time);
}
?>