session_gc
(PHP 7 >= 7.1.0, PHP 8)
session_gc — Realizar una recolección de basura de datos de sesión
Descripción
LA RB basada en probabilidad funciona en cierto modo aunque tiene algunos problemas. 1) Los
datos de sesión de sitios con tráfico bajo podrían no borrarse con la frecuencia
requerida. 2) Los sitios con tráfico alto podrían tener una RB demasiado frecuente. 3) La RB se
realiza durante la petición del usuario, por lo que este podría experimentar un retraso
en la RB.
Por tanto, se recomienda ejecutar la RB periódicamente para
sistemas en produción. P.ej., use "cron" para sistemas como UNIX.
Asegúrese de inhabilitar la RB basada en probabilidad estableciendo
session.gc_probability
a 0.
Valores devueltos
session_gc() devuelve el número de datos de sesión
eliminados en caso de éxito, o false
en caso de fallo.
Los manejadores de guardado antiguos no devuelven el número de datos de sesión eliminados, sino
solamente el indicador de éxito/fallo. Si este es el caso, el número de datos de sesión
eliminados será 1, sin considerar los datos realmente eliminados.
Ejemplos
Ejemplo #1 Ejemplo de session_gc() para administradores de tareas como cron
<?php
// Nota: Este scriptr debería ejecutarse por el mismo usuario del proceso del servidor web.
// Es necesario una sesión activa para inicializar el accesso al almacén de datos de sesión.
session_start();
// Ejecutar la RB inmediatamente
session_gc();
// Limpiar el ID de sesión creado por session_gc()
session_destroy();
?>
Ejemplo #2 Ejemplo de session_gc() para un script accesible al usuario
<?php
// Nota: Se recomienda usar session_gc() con scripts de administradores de taresas, aunque
// podría utilizarse como sigue.
// Utilizado para la última comprobación de la hora de la última RB
$gc_time = '/tmp/php_session_last_gc';
$gc_period = 1800;
session_start();
// Ejecutar la RB solamente cuando el periodo de RB ha finalizado.
// Esto es, llamar a session_gc() en cada petición es desperdiciar recursos.
if (file_exists($gc_time)) {
if (filemtime($gc_time) < time() - $gc_period) {
session_gc();
touch($gc_period);
}
} else {
touch($gc_period);
}
?>