2012-05-02 112 views
5

Estoy tratando de detener/desactivar la funcionalidad de botón de retroceso del navegador cuando un usuario cierra la sesión de mi aplicación CodeIgniter (PHP). Pero, creo que el navegador está almacenando en caché la página para que se vuelva visible a pesar de que la sesión se destruye desde el cierre de sesión.Botón back de CodeIgniter después de cerrar sesión

Sé que la sesión está muerto a causa cuando el usuario intenta hacer nada (haga clic en cualquier enlace, etc.) que son expulsados ​​a través de los métodos en mi controlador.

No es ideal para tener el botón de volver a trabajar de esta manera, ya que la página anterior contiene información confidencial.

No es una idea de cómo hacer frente a éste, tal vez una página de redirección en el medio (pero entonces el usuario puede cerrar de golpe el botón de atrás muy rápido ¿verdad?), Ayuda!

Gracias.

+0

http://stackoverflow.com/questions/5251110/back-button-takes-the-user-back-to-protected-page-after-logout-zend-framework not codeigniter pero creo que lo hará haz que funcione –

+1

marca esta, creo que te ayudará http://stackoverflow.com/questions/4630484/how-do-i-make-firefox-reload-page-when-back-button-is-pressed – Ula

+0

Gracias @Ula, la solución de encabezados funcionó para mí. –

Respuesta

12

Añadir esto para evitar el almacenamiento en caché de la página anterior:

header("cache-Control: no-store, no-cache, must-revalidate"); 
header("cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
0

después Goto registro de salida una página muestre algún mensaje como "hasta pronto", y después de algún tiempo redirección desde que la página deseada esto podría resolver su problema , como a continuación código para redirigir segunda vez cabecera ("Refresh 3; url = home.php ");

+0

http://stackoverflow.com/questions/6648093/php-prevent-going-back-page-after-log-out – user1370510

0

Se puede usar javascript para cerrar la ventana después de que termine la sesión - eliminando así cualquier posibilidad de volver las páginas.

Muchos de los bancos en línea hacen esto para resolver este problema exacto.

13

creo que esto podría ayudarle a salir, a mí me funciona.

Framework versión CodeIgniter:

$this->output->set_header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT'); 
$this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate'); 
$this->output->set_header('Cache-Control: post-check=0, pre-check=0',false); 
$this->output->set_header('Pragma: no-cache'); 

versión de PHP:

header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Cache-Control: post-check=0, pre-check=0',false); 
header('Pragma: no-cache'); 

si está usando PHP POO poner el código anterior en su constructor para inicializar en sus páginas.

+0

¿Dónde debería agregar este código? En el controlador o en cada página de vista? estoy usando codeigniter framework. –

0

creo que el siguiente debería ayudarle a cabo

1) Crear un archivo logout.php y agregue el código siguiente para que

<html> 
<head> 
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
$("#submit").trigger("click"); 
}); 
</script> 
</head> 

<body> 
<form action="<?php echo base_url();?>login" method="post"> 
<input type="submit" id="submit" style="display: none;"> 
</form> 
</body> 
</html> 

2) Modificar la función de cierre de sesión para cargar un archivo de vista por encima de logout.php

1

Mi solución para este problema:

  1. Compruebe que la cookie se establece Wil l con un if.
  2. Ingrese los parámetros y llame al método de inicio de sesión del modelo de usuario.
  3. Carga finalmente las vistas correspondientes.

Si la cookie no está configurada se redirigirá a la página de inicio de sesión.

if(isset($_COOKIE['ci_session'])){ 
    $user= $this->security->xss_clean($this->input->post('user')); 
    $pass= $this->security->xss_clean($this->input->post('pass')); 

    $result = $usrLog->loguearUsuario($user, $pass); 

    if($result == TRUE){ 
    $data = $this->session->set_userdata('logged_in', $sessArray); 
    $this->load->view('pages/admin', $data); 
    } 

}else{ 
    header('Location: login'); 
} 

Espero que aprendan! ¡Y lo siento por mi Inglés!:-)

Cuestiones relacionadas