Bienvenido a datoweb.com!! En este foro podrás encontrar ayuda sobre diseño y desarrollo web en general. Si quieres formar parte de esta comunidad para pedir ayuda o colaborar ayudando a otros usuarios del foro solo tienes que registrarte desde el siguiente enlace: Registrarse en el Foro

Temporizador para alerta cierre de sesion

Hola, tengo un caso y a ver si hay alguna ayuda, referencia por donde podria ir la solucion, y es que una vez iniciada sesion pasado cierto tiempo de inactividad la sesion se cierra sola dejando una pantalla en blanco. La idea es que pasado cierto tiempo se despliegue una ventana modal de alerta con temporizador alertando que la sesion se cerrara por inactividad y aparezca un cuenta atras. Dando la opcion que al clickear un boton "continuar" la sesion se mantenga. COmo lo tienen la mayoria de las paginas web actuales.

Lo ideal es que nunca se cierre sesion...solo cuando el usuario vuelve a la ventana del sitio web luego de la inactividad o cuando vuelve a abrir la pagina. Tengo un include y al final -DE MOMENTO - un script que solo hace refrescar la pagina para evitar que la sesion se cierre automaticamente...pero el problemna es que los usuarios por ejemplo ingresan datos de un formulario y como la pagina se refresca automaticamente... los datos se pierden.

Tal vez el archivo include arrancar.php deba modificarse pero no estoy seguro.

Espero haber dejado todos los datos del caso, este es el script del include presente:

<script type="text/javascript">
function reFresh() {
location.reload(true)
}
window.setInterval("reFresh()",1800000);
</script>

Gracias de antemano por la ayuda
0
Puntos
1011
Visitas
3
Resp
Por claudioam hace 16 meses
Principiante
Respuesta #1
el script con function reFresh se puso para evitar a tiempo que la sesion se cerrara, pero el problema es que se refrezca la pagina(url) y se borran los datos que el usuario ha ingresado por ejemplo en un formulario : /
0
Puntos
Por claudioam hace 16 meses
Principiante
Respuesta #2
investigando encontré este codigo , no o he probado, porque no sé donde ponerlo si como un nuevo include , en el include donde esta actualmente el script refresh o en el include arrancar.php de inicio de sesion. Este es el codigo:
//Comprobamos si esta definida la sesión 'tiempo'.
if(isset($_SESSION['tiempo']) ) {

    //Tiempo en segundos para dar vida a la sesión.
    $inactivo = 1200;//20min en este caso.

    //Calculamos tiempo de vida inactivo.
    $vida_session = time() - $_SESSION['tiempo'];

        //Compraración para redirigir página, si la vida de sesión sea mayor a el tiempo insertado en inactivo.
        if($vida_session > $inactivo)
        {
            //Removemos sesión.
            session_unset();
            //Destruimos sesión.
            session_destroy();              
            //Redirigimos pagina.
            header("Location: tupagina");

            exit();
        } else {  // si no ha caducado la sesion, actualizamos
            $_SESSION['tiempo'] = time();
        }


} else {
    //Activamos sesion tiempo.
    $_SESSION['tiempo'] = time();
}
o tambien, podemos omitir el ultimo else y actualizar siempre la sesion, ya que si ha caducado redirigimos a "tupagina":

    //Comprobamos si esta definida la sesión 'tiempo'.
    if(isset($_SESSION['tiempo']) ) {

        //Tiempo en segundos para dar vida a la sesión.
        $inactivo = 1200;//20min en este caso.

        //Calculamos tiempo de vida inactivo.
        $vida_session = time() - $_SESSION['tiempo'];

            //Compraración para redirigir página, si la vida de sesión sea mayor a el tiempo insertado en inactivo.
            if($vida_session > $inactivo)
            {
                //Removemos sesión.
                session_unset();
                //Destruimos sesión.
                session_destroy();              
                //Redirigimos pagina.
                header("Location: tupagina");

                exit();
            }

    }
    $_SESSION['tiempo'] = time();
0
Puntos
Por claudioam hace 16 meses
Principiante
Respuesta #3
agrego la posible solucion completa. A ver si esta bien o falta agregar codigo o depende del archivo include de sesion arrancar.php:
Al momento de crear la SESSION , guardar el tiempo en una variable de SESSIÓN este se obtiene haciendo uso de la función time (en segundos) para luego comparar con el tiempo que se desee (Tiempo Actual - valorGuardado) > tiempoenSegundos 



session_start();
if (!isset($_SESSION['tiempo'])) {
    $_SESSION['tiempo']=time();
}
else if (time() - $_SESSION['tiempo'] > 120) {
    session_destroy();
    /* Aquí redireccionas a la url especifica */
    header("Location: urlLogin");
    die();  
}
$_SESSION['tiempo']=time(); //Si hay actividad seteamos el valor al tiempo actual

La solución falla en un detalle y es que cuando haya actividad la variable de sessión guardada no se actualizará

.....

Entonces faltaria actualizar la sesion en caso de no caducar:

//Comprobamos si esta definida la sesión 'tiempo'.
if(isset($_SESSION['tiempo']) ) {

    //Tiempo en segundos para dar vida a la sesión.
    $inactivo = 1200;//20min en este caso.

    //Calculamos tiempo de vida inactivo.
    $vida_session = time() - $_SESSION['tiempo'];

        //Compraración para redirigir página, si la vida de sesión sea mayor a el tiempo insertado en inactivo.
        if($vida_session > $inactivo)
        {
            //Removemos sesión.
            session_unset();
            //Destruimos sesión.
            session_destroy();              
            //Redirigimos pagina.
            header("Location: tupagina");

            exit();
        } else {  // si no ha caducado la sesion, actualizamos
            $_SESSION['tiempo'] = time();
        }


} else {
    //Activamos sesion tiempo.
    $_SESSION['tiempo'] = time();
}
o tambien, podemos omitir el ultimo else y actualizar siempre la sesion, ya que si ha caducado redirigimos a "tupagina":

    //Comprobamos si esta definida la sesión 'tiempo'.
    if(isset($_SESSION['tiempo']) ) {

        //Tiempo en segundos para dar vida a la sesión.
        $inactivo = 1200;//20min en este caso.

        //Calculamos tiempo de vida inactivo.
        $vida_session = time() - $_SESSION['tiempo'];

            //Compraración para redirigir página, si la vida de sesión sea mayor a el tiempo insertado en inactivo.
            if($vida_session > $inactivo)
            {
                //Removemos sesión.
                session_unset();
                //Destruimos sesión.
                session_destroy();              
                //Redirigimos pagina.
                header("Location: tupagina");

                exit();
            }

    }
    $_SESSION['tiempo'] = time();






0
Puntos
Por claudioam hace 16 meses
Principiante
Compartir en facebook
Compartir en twitter
Compartir
Para comentar Inicia sesión o Registrate