2010-11-10 32 views
12

He creado una página de inicio de sesión simple que se basa en las sesiones.Destruir sesión de PHP al cerrar

session_start(); 

y ha añadido una página de cierre de sesión que contiene este

session_destroy(); 

Ahora cuando cierro el navegador/página y volver a abrirlo, los valores de la sesión todavía están allí.

Quiero saber cómo destruir completamente la sesión en la página/navegador cercano.

+0

que no es necesario reinventar la rueda con una llamada AJAX o lo que sea. Simplemente puede usar la funcionalidad integrada de cómo funcionan las cookies. Puede decirle al navegador que elimine la cookie cuando se cierra con mucha facilidad. No se requiere Javascript –

+0

@ Chacha102: ¿algún tutorial? – sikas

+1

No, la eliminación o sobreescritura de la cookie de sesión forma parte de la historia, pero los datos seguirán estando disponibles en el servidor; en realidad, también debe sobrescribir los datos de la sesión ($ _SESSION = array();); esto evita MUCHO de complicaciones – symcbean

Respuesta

24

si utiliza:

session_set_cookie_params(0); 
session_start(); 

Su sesión cookie se destruye cuando se cierra el navegador ... así que la sesión será bueno hasta que se cierre el navegador. ES DECIR. Se registra, y que está en el sistema, se cierra el navegador, volver a abrirlo, vaya al sitio de nuevo, y usted no puede registrar en

+4

No funciona ... mis páginas todavía se abren no sé por qué he puesto el mismo código en mi página de inicio de sesión y la página del encabezado de la plantilla, pero no se destruye – Vivek

+0

no funciona aquí tampoco – Kreker

+3

No funcionó para mí también, pero encontré la (mi) razón: Firefox fue confirado para recordar las pestañas después del cierre, y esta función evita que la sesión sea destruida. Detalles aquí: https://support.mozilla.org/de/questions/975670 – user2345998

5

Solo podrá detectar si la ventana del navegador se ha cerrado usando javascript y en ese punto podría desencadenar una solicitud Ajax para realizar una acción de cierre de sesión.

+3

A pesar del voto negativo, este método funcionará y JS es la única forma en que puede detectar si se cierra una ventana del navegador. 'session_set_cookie_params (0)' almacenará la cookie en la memoria de los usuarios en lugar de en el disco, pero no enviará comentarios al servidor cuando se cierre la ventana del navegador. La cookie simplemente morirá con el navegador de los usuarios. – Treffynnon

+0

¡No voté ninguno! pero ¿hay algún tutorial sobre esto? – sikas

+0

Esto podría funcionar, pero en mi humilde opinión es posible que un caso cuando durante el cierre de la pestaña/navegador ajax termine/anule. Porque cuando abre una página que contiene ajax y "muy rápido" (justo después del documento listo), haga clic en algún enlace, ya que la nueva página se abrirá, el ajax puede mostrar un error.Gracias – dav

-1

para eliminar las variables de sesión - session_unset (.);

para destruir la sesión - session_destroy();

session_unset(); 
session_destroy(); 
+0

Lea los requisitos de OP completamente. PHP no tiene forma de saber cuándo se cierra un navegador, especialmente no con estas dos líneas. –

0

El servidor no puede detectar el navegador o la pestaña cerrada, puede usar Javascript o Ajax, pero lo siento, no tengo conocimiento de eso.

Mi sugerencia es usar Tiempo de espera de la sesión, por lo que la sesión se destruirá si el usuario no realiza ninguna acción. Este es un ejemplo:

// destroy every 2 minutes 

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 120)) { 
    // last request was more than 2 minutes ago 
    session_destroy(); // destroy session data in storage 
} 
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp 

// end of code 

la esperanza que esto ayudará a

0

Si existe la sesión, la sesión mediante la destrucción de la sesión y redirigir al usuario a la página principal. Se utilizó una cookie temporal para almacenar la identidad de la sesión. Esta cookie también se destruye.

<?php 
    // This is the logout page for the site. 
    session_start();//access the current session. 
    //if no session variable then redirect the user 
    if (!isset($_SESSION['user_id'])) { 
    header("location:index.php"); 
    exit(); 
    }else{ //cancel the session 
     $_SESSION = array(); // Destroy the variables 
     session_destroy(); // Destroy the session 
     setcookie('PHPSESSID', ", time()-3600,'/', ", 0, 0);//Destroy the cookie 
     header("location:index.php"); 
     exit(); 
    } 
    ?> 
Cuestiones relacionadas