2010-10-16 7 views
30

Est-il suffisant pourLa meilleure façon de détruire complètement une session - même si le navigateur n'est pas fermé

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

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

lorsque l'utilisateur sélectionne Log out à partir d'un menu, mais ne quitte pas son navigateur? Je veux supprimer totalement toute existence de la session et $_SESSION

+4

je ne voudrais pas 'unset ($ _ SESSION),' 'avant session_destroy()', il se pourrait que session_destroy ne peut pas fonctionner correctement –

Répondre

60

Selon le manual, il y a plus à faire:

Afin de tuer la session tout à fait, comme pour déconnecter l'utilisateur, l'identifiant de session doit également être désactivé. Si un cookie est utilisé pour propager l'identifiant de session (comportement par défaut), le cookie de session doit être supprimé. setcookie() peut être utilisé pour cela.

Le lien manuel présente un exemple de travail complet sur la façon de procéder. Volé à partir de là:

<?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

pourquoi ne pas utiliser '' session_unset' au lieu de $ _SESSION = array(); '? – alexw

+0

J'ai testé ici et vous pouvez utiliser unset ($ _ SESSION) ou assigner null à $ _SESSION ou un tableau vide comme l'a fait Pekka! – Zanoldor

Questions connexes