(PHP 7 >= 7.1.0, PHP 8)
session_gc — Ejecuta la recolección de basura de los datos de sesión
Por omisión, PHP utiliza session.gc_probability para ejecutar el recolector de basura de sesión de forma probabilística en cada solicitud. Este enfoque presenta algunas limitaciones:
Para sistemas de producción, se recomienda deshabilitar la
recolección de basura basada en probabilidad configurando
session.gc_probability en 0
y activar explícitamente el recolector de basura periódicamente, por ejemplo, utilizando "cron" en
sistemas tipo UNIX para ejecutar un script que llame a session_gc().
Nota: Al llamar a session_gc() desde un script PHP de línea de comandos, session.save_path debe tener el mismo valor que las solicitudes web, y el script debe tener permisos de acceso y eliminación para los archivos de sesión. Esto puede verse afectado por el usuario con el que se ejecuta el script y por características de contenedor o aislamiento, como la opción
PrivateTmp=de systemd.
Esta función no contiene ningún parámetro.
session_gc() devuelve el número de datos de sesión eliminados
en caso de éxito, o false si ocurre un error.
Nota: Los antiguos gestores de almacenamiento de sesiones no devuelven el número de entradas de sesión eliminadas, sino solo un indicador de éxito/fracaso. En este caso, se devuelve
1independientemente de cuántas entradas de sesión se hayan eliminado realmente.
Ejemplo #1 Ejemplo de session_gc() para planificadores de tareas como cron
<?php
// Nota: Este script debe ser ejecutado por el mismo usuario que el proceso del servidor web.
// Requiere la activación de las sesiones para inicializar el acceso al gestor de almacenamiento de sesiones
session_start();
// Ejecutar la recolección de basura inmediatamente
session_gc();
// Eliminar el ID de sesión creado por session_start()
session_destroy();
?>Ejemplo #2 Ejemplo de session_gc() para scripts accesibles por el usuario
<?php
// Nota: Se recomienda que session_gc() sea utilizado por un planificador de tareas,
// pero puede ser utilizado de la siguiente manera.
// Utilizado para verificar la hora del último uso de la recolección de basura
$gc_time = '/tmp/php_session_last_gc';
$gc_period = 1800;
session_start();
// Ejecutar la recolección de basura solo cuando haya transcurrido el período.
// Es decir, llamar a session_gc() en cada solicitud es un desperdicio de recursos.
if (file_exists($gc_time)) {
if (filemtime($gc_time) < time() - $gc_period) {
session_gc();
touch($gc_time);
}
} else {
touch($gc_time);
}
?>