session_gc

(PHP 7 >= 7.1.0, PHP 8)

session_gcEjecuta la recolección de basura de los datos de sesión

Descripción

session_gc(): int|false

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:

  • Es posible que sitios con poco tráfico no eliminen sus datos de sesión dentro del plazo preferido.
  • Sitios con mucho tráfico pueden hacer que el recolector de basura funcione con demasiada frecuencia, realizando trabajo extra innecesario.
  • La recolección de basura se realiza a petición del usuario, y este puede experimentar una demora.

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.

Parámetros

Esta función no contiene ningún parámetro.

Valores devueltos

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 1 independientemente de cuántas entradas de sesión se hayan eliminado realmente.

Ejemplos

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

Ver también