2010-09-05 19 views
8

Tengo una página web que requiere iniciar sesión. Una vez que un usuario se ha conectado, comienzo la sesión y una vez que cierra la sesión, la destruyo, pero cuando presiono la página posterior, nuevamente me da la página de perfil de usuario, que idealmente no debería ser el caso cuando el usuario se desconecta. Sin embargo, funciona bien si recargo la página después de cerrar la sesión.Recargar la página al presionar el botón Atrás

Es una sala de chat local donde todos los que están en línea y pueden iniciar sesión pueden chatear juntos. Hay tres páginas: login.php, auth.php, logout.php

login.php es la página de inicio de sesión común que contiene un formulario. auth.php tiene un div que muestra todos los chats anteriores hasta ahora, un cuadro de texto y botón compartir al hacer clic en el cual se envía un formulario nuevamente a auth.php así que cada vez que se publica el formulario, el poste de discusión se envía a la base de datos y se recarga con la última base de datos el chat div ..

Ahora el problema es que una vez que salgo de sesión desarmo todas las variables y destruyo la sesión pero incluso si presiono el botón Atrás en el navegador (Safari), la versión anterior de auth.php sin la última entrada de chat es visible que, idealmente, no debería, ya que la sesión se destruye. He puesto una validación sesión en auth.php, así que básicamente quiero que el auth.php para recargar de las visitas de los usuarios que después de salir como la recarga auth.php muestra que "no está en el sistema"

he tratado

<?php header("Cache-Control: no-cache"); 
header("Pragma: no-cache"); 
?> 
and 
<head> 
<meta http-equiv='Pragma' content='no-cache'> 
<meta http-equiv='Expires' content='-1'> 
</head> 

Perdón por la larga pregunta, pero realmente necesito ayuda con esto.

+0

Consejo: use la gramática adecuada para explicar su problema, en lugar de 1 oración larga; mejorarán las posibilidades de que alguien realmente quiera leer esto. – Alec

+1

@Alec, Su gramática es correcta, excepto un error tipográfico "Quiero que auth.php vuelva a cargar' of' el usuario lo visite después de cerrar la sesión ". @ Tushar divide tu pregunta en párrafos para mejorar la legibilidad –

+0

esto es muy extraño ¿verdad? utilizar PHP 'session_start()' function para generar la sesión en la página de inicio de sesión? En caso afirmativo, ya debe tener cuidado de enviar el encabezado correcto para evitar que el navegador guarde en caché la página (ver mi respuesta). ¿En qué navegador lo has probado? –

Respuesta

6

Estas cabeceras obligarán al navegador y proxies si los hay, no hagan caché de la página y forzar una nueva petición al servidor para esa página:

header("Cache-Control: private, must-revalidate, max-age=0"); 
    header("Pragma: no-cache"); 
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // A date in the past 
+0

hace esto también destruye todas las variables de sesión – tushar

+0

porque cuando comienzo la sesión hago $ _session ['logged'] = 1 – tushar

+2

ahora cuando ingresé el código anterior después de volver a cargar la página su valor es nulo – tushar

8
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT"); //Date in the past 
header("Cache-Control: no-store, no-cache, must-revalidate"); //HTTP/1.1 

Esto funciona para mí en FF3. 6, IE7, IE8, Chrome5 (al golpear la espalda del navegador/cuarto botón de la página se vuelve a cargar siempre)

Otra solución es enviar exactamente las mismas cabeceras enviadas por session_start() función, muy similar a los anteriores, pero aún más rica:

header("Expires: Thu, 19 Nov 1981 08:52:00 GMT"); //Date in the past 
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); //HTTP/1.1 
header("Pragma: no-cache"); 

NOTA: también el orden que se muestra aquí es el mismo que el orden enviada por session_start() (se puede probar esto con HttpFox complemento para FF)

0

Sin cambiar la url, pon esto en la etiqueta de la cabeza.
La secuencia de comandos utiliza dos galletas:
- uno para almacenar si la página ha sido visitada
- uno para almacenar si el reaload se ha disparado

if(navigator.cookieEnabled){  
    var visited=0; 
    var refreshing=0; 
    if(Get_Cookie('visited')) { 
     visited=parseInt(Get_Cookie('visited')); 
    } 
    if (Get_Cookie('refreshing')) { 
     refreshing=parseInt(Get_Cookie('refreshing')); 
    } 
    if(visited==1){ 
     if(refreshing==0){ 
      window.document.cookie = 'refreshing=1'; 
      window.location.reload(); 
     }else{ 
      window.document.cookie = 'refreshing=0'; 
     } 
    }else{ 
     window.document.cookie = 'visited=1'; 
    } 
} 
4

Para una solución javascript puro sólo tiene que añadir esto a su HTML :

<input id="alwaysFetch" type="hidden" /> 
<script> 
    setTimeout(function() { 
     var el = document.getElementById('alwaysFetch'); 
     el.value = el.value ? location.reload() : true; 
    }, 0); 
</script> 

El código simplemente asigna un valor a la entrada oculta que permanecerá después de que se haga clic en el botón Atrás. Esto se usa para determinar si la página está obsoleta, en cuyo caso se vuelve a cargar.

+0

esto funciona en wechat – xiongjiabin

0

Estoy usando una solución mixta, ya que no encontré un método de navegador cruzado para volver a cargar la página después de presionar el botón de retroceso.

En primer lugar, añado algunas etiquetas meta a todos mis páginas:

<meta http-equiv="Pragma" content="no-cache"> 
<meta http-equiv="no-cache"> 
<meta http-equiv="Expires" content="-1"> 
<meta http-equiv="Cache-Control" content="no-cache"> 

En segundo lugar, añado el siguiente código JavaScript en la etiqueta en todas mis páginas:

<script type="text/javascript">  
// If persisted then it is in the page cache, force a reload of the page. 
     window.onpageshow =function(event){ 
      if(event.persisted){   
       document.body.style.display ="none";   
       location.reload(); 
      } 
     }; 
</script> 

estoy solicitando esta solución en uno de mis sitios web y funciona bien en IE 10, Safari y Chrome.

0

He intentado muchas soluciones, pero lo que funcionó para mí es esta simple línea de código.

<body onunload=""> 

Agregue evento de descarga con etiqueta de cuerpo y verifique su problema.

Cuestiones relacionadas