Pregunta:
Fecha: 21-04-2018 15:52:15
(En Español)
En este codigo, como ejemplo, se intenta que la session de usuario solo dure solo 60 segundos luego expire.
El resultado se muestra:
Tiempo de session actual es de 1440 segundos.
Tiempo de session ahora es de 60 segundos.
Nombre: Pepe
Pero la session no caduca transcurridos los 60 segundos seteados.
¿Que faltaria en el codigo para que funcione?
Que tengan un buen día.
Saludos. Votos: 0 - Respuestas: 4 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn Link
¿Por que la session no se termina transcurrido el tiempo al cual le fue seteado?[Resuelta]
Hola a todosEn este codigo, como ejemplo, se intenta que la session de usuario solo dure solo 60 segundos luego expire.
<?php
// Manejo del TTL de las sesiones.
// Se obtiene el tiempo de duración de la session actual
$maxlifetime = ini_get("session.gc_maxlifetime");
echo "Tiempo de session actual es de $maxlifetime segundos.<br>";
// el servidor debe mantener los datos de la sesión durante AL MENOS 60 segundos
ini_set('session.gc_maxlifetime', 60);
// cada cliente debe recordar su ID de sesión por EXACTAMENTE 60 segundos
session_set_cookie_params(60); // segundos
// Se obtiene el tiempo de duración de la session actual
$maxlifetime = ini_get("session.gc_maxlifetime");
echo "Tiempo de session ahora es de $maxlifetime segundos.<br>";
// ------------------------------------------------------------------//
// A partir de aqui todo el codigo de manejo de sesiones
session_start(); // Iniciar una nueva sesión o reanudar la existente
$_SESSION['nombre'] = 'Pepe';
echo "Nombre: {$_SESSION['nombre']} <br>";
El resultado se muestra:
Tiempo de session actual es de 1440 segundos.
Tiempo de session ahora es de 60 segundos.
Nombre: Pepe
Pero la session no caduca transcurridos los 60 segundos seteados.
¿Que faltaria en el codigo para que funcione?
Que tengan un buen día.
Saludos. Votos: 0 - Respuestas: 4 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 23-04-2018 10:35:43 Walter, el recolector de basura (GC - Garbage Collector) de la sesión no es el indicado ni es confiable por la manera en que funciona.
Tú mismo tienes que implementar la lógica.
He encontrado un código muy básico que te puede ayudar:
$duracionSesion = 60; if (isset($_SESSION['ultima_actividad']) && (time() - $_SESSION['ultima_actividad'] > $duracionSesion )) { session_unset(); session_destroy(); //TODO: Redirigir al login o crear una entrada en el log } $_SESSION['ultima_actividad'] = time();
Saludos Votos: 1 - Link respuesta -
Fecha: 23-04-2018 13:36:03 Ernesto muchas gracias por responder.
Claro de esa manera se chequea el tiempo transcurrido y luego destruir la sesión cuando llego el plazo.
El tiempo seteado fue a modo de ejemplo para comprobar si se podía alterar el tiempo que expira la session.
Uno de los casos era que antes que se venciera el tiempo máximo de la session se renueve el tiempo para que no se cierre la session.
Segun comentas que no seria posible alterar el tiempo de vida de la session seteandolo.
Saludos Votos: 0 - Link respuesta -
Fecha: 26-04-2018 10:03:48 Hola Walter,
Correcto. El problema en tu ejemplo radica en que estás afectando la configuración:
gc_maxlifetime
Las configuraciones cuyo nombre comienzan con gc_ afectan al Garbage Collector de PHP (GC) que se encarga de limpiar referencias inválidas de la memoria.
La funcionalidad del GC se basa en una probabilidad matemática que por defecto es de 1/100 así que existe 1 probabilidad de cada 100 en que se limpie el valor de la memoria.
Definitivamente las configuraciones que estás modificando no van a funcionar como esperas.
Te dejo el link para que clarifiques un poco más sobre el tema:
gc_maxlifetime (y los valores relacionados gc_probability y gc_divisor)
session_gc -> Este te puede servir
GC o Recolector de Basura
Espero que te sirva
Saludos Votos: 1 - Link respuesta -
Fecha: 24-06-2018 12:20:45 Ernesto muchas gracias por tu respuesta, revisare los links
Saludos Votos: 0 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
