2012-04-04 25 views
5

Tengo la página de cierre de sesión de php. cuando el usuario hace clic en el enlace de cierre de sesión. Consulte esta página y redireccione a la página de índice. pero cuando hago clic en el botón Atrás, veo la página de Uso incorrecto con los datos del usuario. por supuesto, cuando actualizo la página, no veo la página y los datos de Facebook. Comprobé otro código (drupal) después de cerrar la sesión y hago clic en el botón Atrás. No veo la página de Uso general y veo la página de inicio de sesión. ¿Dónde está mi problema? cómo arreglar esto?evitar el botón Atrás después de la página de cierre de sesión

página de salida:

if (isset($_GET['req']) && $_GET['req'] == 'logout') { 
     session_start(); 
     session_destroy(); 
     header("Location: index.php"); 
    exit(); 
} 

Gracias

+0

no se puede hacer esto con PHP, es necesario hacer esto con JS El – Michal

+3

la página 'anterior' seguirá estando en la memoria caché del navegador. Si desea evitar operaciones "inversas" a una página que requiere un inicio de sesión activo, tendrá que hacer que no se puedan cachar. –

+0

haciéndolos incableables no impedirá que el navegador los almacene en el historial ... imo – Michal

Respuesta

2

el código es correcto. En realidad, no es necesario evitar que las personas hagan clic en el botón Atrás. Si realmente crees que esto es importante, puedes guardar una cookie u otra cosa en logout.php y la página principal comprueba con AJAX si esta cookie está configurada. Y si es así, podría volver a cargar la página con JS (y, por supuesto, desarmar la cookie). Pero una manera realmente segura no existe.

-3

agregue esto a su código, evitará que el usuario haga clic en el botón Atrás.

 ignore_user_abort(true); 
+0

no, no ... 'ignore_user_abort()' establece si una desconexión del cliente debe provocar el aborto de una secuencia de comandos. – Michal

1

Usted está pidiendo esencialmente la forma de purgar el historial del navegador del usuario y la memoria caché de una página que tenían acceso a, pero ya no lo hacen. Cuando está desconectando a un usuario, está eliminando su capacidad para volver a cargar la página, y hay muy poco (si hay algo) que puede hacer que puede evitar que el navegador le muestre algo que en un momento se le permitió cargar (son datos obsoletos). La pieza importante es que cuando vuelven a cargar, no obtienen datos nuevos: no puede borrar el caché de lo que ya cargó.

Editar: también quería añadir algo después de leer los comentarios de otros: se puede decir que el navegador no caché de cualquiera de los datos, lo que les obligaría a cargar todo, incluso cuando se pulse el botón de retroceso, pero' También les exigiré que recarguen todo, incluso cuando estén autenticados, que es la compensación que tendrían que aguantar. Obviamente, depende de la situación particular de su sitio, pero en la mayoría de los casos no creo que sea una solución que valga la pena. Su alojamiento requeriría más ancho de banda porque los recursos se volverían a descargar en cada carga de página, las cargas de página serían más largas porque los navegadores no podían confiar en su caché local, por lo que su aplicación, naturalmente, parecería más lenta para los usuarios. Siempre que no sea absolutamente necesario que no se vean los datos a menos que estén conectados de forma activa, solo encontraría una forma cortés y discreta de decirle a los usuarios que cierren sesión y cierren la ventana del navegador para disminuir la probabilidad de que ojos viendo datos que no deberían.

0

Uso están utilizando $_GET pero no la validación de forma nada $_SESSION

Prueba este

session_start(); 
if (isset ($_GET ['req']) && $_GET ['req'] == 'logout') { 
    $_SESSION ['auth'] = false ; 
    session_destroy(); 
} 

if (! isset ($_SESSION ['auth']) || $_SESSION ['auth'] == false) { 
    header ("Location: index.php"); 
    exit(); 
} 

Asegúrese de que en sus páginas principales que tiene algo como esto

session_start(); 

if(/** login Condition **/) 
{ 
    $_SESSION ['auth'] = true ; 
} 

if (! isset ($_SESSION ['auth']) || $_SESSION ['auth'] == false) { 
    header ("Location: index.php"); 
    exit(); 
} 

Gracias

:)

2

Creo que esto es principalmente un problema del lado del cliente y debido a los encabezados de caché del navegador.

¿cuál es la solución?

En mi opinión lo que necesita para establecer cabeceras de caché de contenido estático y el contenido no estáticos adecuadamente

contenidos estáticos (CSS/JavaScript/imágenes): read this

Por página php en sí: header("Cache-Control", "no-store, no-cache, must-revalidate");

debería hacer el truco

0

Aquí hay una solución fácil y rápida. Para la etiqueta de formulario de inicio de sesión, agregue target = "_ blank" que muestra el contenido en una ventana diferente. Luego, después de cerrar la sesión simplemente cierre esa ventana y se resuelve el problema del botón Atrás (navegador Safari). Incluso al tratar de usar el historial, no se mostrará la página y, en su lugar, se redirigirá a la página de inicio de sesión. Esto está bien para los navegadores Safari pero para otros, como Firefox, el session_destroy(); se ocupa de eso

0
<? 
session_start(); 
if(!isset($_SESSION['username']) && !isset($_SESSION['password'])){ 
header("Location:../index.php"); 
exit; 
} 
else{ 
session_destroy(); 
} 
?> 

pasta de esto en cada página o en su cierre de sesión es

<?php 
session_start(); 
session_unset(); 
session_destroy(); 
header("Location:../index.php"); 
exit; 

user_logout.php

Cuestiones relacionadas