session_gc

(PHP 7 >= 7.1.0, PHP 8)

session_gcСобирает мусорные данные сессии

Описание

session_gc(): int|false

По умолчанию 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);
}
?>

Смотрите также