2010-10-16 17 views
30

¿Es suficientemejor manera de destruir por completo una sesión - incluso si el navegador no está cerrado

session_start(); // Must start a session before destroying it 

if (isset($_SESSION)) 
{ 
    unset($_SESSION); 
    session_unset(); 
    session_destroy(); 
} 

cuando el usuario selecciona Log out de un menú, pero no renunció a su navegador? Quiero eliminar totalmente toda la existencia de la sesión y $_SESSION

+4

yo no 'unset ($ _SESSION);' 'antes session_destroy()', podría ser que session_destroy es incapaz de funcionar correctamente –

Respuesta

60

De acuerdo con la manual, no hay más que ver:

Con el fin de matar a la sesión por completo, como para conectar al usuario a cabo, el id de sesión también debe estar desarmado. Si se usa una cookie para propagar la identificación de la sesión (comportamiento predeterminado), entonces la cookie de sesión debe ser eliminada. setcookie() se puede usar para eso.

El enlace manual tiene un ejemplo completo de trabajo sobre cómo hacerlo. Robado de allí:

<?php 
// Initialize the session. 
// If you are using session_name("something"), don't forget it now! 
session_start(); 

// Unset all of the session variables. 
$_SESSION = array(); 

// If it's desired to kill the session, also delete the session cookie. 
// Note: This will destroy the session, and not just the session data! 
if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
     $params["path"], $params["domain"], 
     $params["secure"], $params["httponly"] 
    ); 
} 

// Finally, destroy the session. 
session_destroy(); 
?> 
+6

por qué no usar '' session_unset' en lugar de $ _SESSION = array(); '? – alexw

+0

He probado aquí y puedes usar unset ($ _ SESSION) o asignar null a $ _SESSION o una matriz vacía como lo ha hecho Pekka. – Zanoldor

Cuestiones relacionadas