Sesión siendo refrescada en segundo plano

Evitar expiración de sesión de PHP

Hoy vamos a ver cómo evitar que una sesión de PHP expire, es decir, prevenir o evitar la expiración de una sesión en PHP.

Para ello vamos a usar un poco de JavaScript.

La lógica

Sin importar si cambiamos el valor de session.gc_maxlifetime la sesión siempre va a expirar si el usuario no refresca la página o la sesión por determinado tiempo.

Por ejemplo, puede haber un formulario que debe llenarse en el transcurso del día, si se inicia sesión al inicio, cuando se quiera enviar al final del día la sesión habrá expirado y el trabajo estará perdido.

Para evitar que una sesión expire debemos estar refrescándola, esto es, hacer que el usuario refresque una página o ejecuta un script de PHP cada cierto tiempo para indicar que “sigue ahí”.

Como no podemos hacer que nuestros usuarios lo hagan manualmente podemos usar JavaScript para que haga peticiones AJAX en segundo plano cada determinado tiempo, y en esa petición refrescar la sesión. De esa forma la sesión no se cierra por inactividad.

Evitar expiración de sesión en PHP

Antes de todo, el usuario debe haber iniciado sesión ya sea desde un formulario de login o desde cualquier otro lugar.

Comencemos. Primero debemos tener un script que llame a session_start() para refrescar la sesión; puedes comprobar si la sesión no está iniciada, o usar @ para silenciar errores de que la sesión ya se había iniciado.

En este caso para fines prácticos lo haré con @ para silenciar errores así que:

Ahora en cada página o en la página en donde el usuario estará sin mover otra cosa que reinicie la sesión, debemos hacer que un script de JS haga una petición HTTP al archivo de PHP cada cierto tiempo.

Para ejecutar algo cada cierto tiempo usamos setInterval, y para las peticiones HTTP se pueden usar varias cosas, por ejemplo fetch, que es una función nativa y moderna.

Por lo tanto, cada 5 segundos visitamos al script:

Y ese script lo colocamos dentro de una página PHP o HTML:

Si notas que incluí las etiquetas en el encabezado fue para que se reconociera la sintaxis. Con eso es suficiente. Con este enfoque, cada 5 segundos se estará abriendo el archivo refrescar.php, lo que será como si el usuario estuviera navegando activamente, evitando la expiración de la sesión.

En las herramientas de depuración de Chrome se pueden ver las peticiones, lo cual demuestra que efectivamente el script de PHP que refresca la sesión está siendo invocado:

Evitar expiración de sesión PHP

Recuerda que puedes cambiar el intervalo de tiempo, incluso con 5 minutos quedaría bien.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

11 comentarios en “Evitar expiración de sesión de PHP”

Dejar un comentario