entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

al cerrar sesión que no muestre pagina al presionar atras (codeigniter)

tengo inconvenientes al cerrar sesión en un aplicativo desarrollado en codeigniter.
Al cerrar sesion y luego al presionar atras me sigue mostrando la pagina, lo que deseo es cerrar sesion y al presionar atras me muestre el login.

0voto

carlossevi comentado

A ver si te he entendido bien ¿Quieres que si un usuario cierra sesión en tu aplicación y pulsa el botón "atrás" del navegador no pueda ver la página anterior?

0voto

alexalex comentado

confirmado compañero

0voto

Leonardo-Tadei comentado

Alex,

yo no entiendo lo que querés decir con que "en estructurada funciona, pero en codeigniter no"..

Codeigniter es un framework. Con "estructurada" a qué te referís???

0voto

alexalex comentado

al cerrar sesión en una aplicaciòn hecha en codeigniter, al presionar atràs en el navegador muestra la pagina, estoy utilizando $this->session->sess_destroy(); para destruir la sessión y seteando otros valores como $datasession = array('is_logged_in' => 'false'); para luego validarlos, pero me sigue mostrando lo mismo.

0voto

Leonardo-Tadei comentado

Hola Alex,
sigo sin saber a qué te referís con "estructurada" en la pregunta :-(

0voto

alexalex comentado

Leonardo ya edite la pregunta para no confurdirnos.

1 Respuesta

2votos

white Puntos75820

Cuando presionas atras el explorador esta mostrando la pagina en cache, eso no quiere decir que no se cerro sesion previamente, de todos modos si quieres que el documento expire podrias intentar con:

<?php
// seteando las cabeceras
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
// en codeigniter seria:
     $this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
    $this->output->set_header("Pragma: no-cache");
?>

EDIT: no vi que querias mostrar el login, que tal si redireccionas despues de hacer logout con

<?php
if( $logout )
{
     redirect('/login/', 'refresh');
}

EDIT 2:
otra solucion es comprobarlo con javascript, pero no creo sea crossbrowser. la idea es refrescar la pagina comprobando una cookie

<script type="text/javascript">
    function check_logout(){
        var logoutCookie = document.cookie.split('=');

        if(logoutCookie[1] == "true"){
            alert('reload...');
            document.location = '';
            document.cookie = 'logout=false';
        }
    };

    window.onload = function ()
    {
        if(!document.cookie.match('logout'))
            document.cookie = 'logout=false';

        else
            check_logout();
    };

    window.onunload = function(){
        check_logout();
    }
</script>

y por el lado del servidor, podrias usar $_COOKIE para definir la cookie logout a 'true', lo acabo de testear en firefox y funciona.

0voto

carlossevi comentado

Muy completa la respuesta.

La solución de no permitir caché es la directa y la que pensaba aconsejar, pero hay que pensar si tiene efectos negativos en la velocidad del sitio si incluyes eso en cada página, depende mucho del tipo de sitio.

Me ha parecido original el control mediante la cookie y Javascript, creo que es la que implementaría aunque hay que tener en cuenta una cosa: esa solución sirve para que un usuario despistado no vuelva hacia atrás y modifique algo después de haber cerrado sesión. No sirve como método de seguridad para un usuario "malintencionado" porque el control lo estás dejando en la parte cliente de la aplicación.

1voto

alexalex comentado

La guía del usuario declara que después de llamar sess_destroy () todos los datos (incluso los datos de flash) ya no estará disponible.
Simplemente desarma la cookie y elimina la sesión de la base de datos .. pero todos los datos de usuario sigue siendo accesible con las funciones normales de sesión como: userdata ( 'session_id') y all_userdata ();
linea-

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta