(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);
}
?>