51 votes

Pourquoi PHP session_destroy() ne fonctionne-t-il pas ?

J'ai essayé de détruire toutes les variables de session en utilisant la méthode session_destroy() , mais après avoir utilisé cette méthode, les valeurs ne sont pas détruites.

Pourquoi session_destroy() ne fonctionne pas ?

Existe-t-il un autre moyen de détruire la session en PHP ?

 if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) 
{   
    session_destroy();   
    session_unset();     
}

127voto

R.D. Points 1480

Il est peut-être trop tard pour répondre, mais assurez-vous que votre session est initialisée avant de la détruire.

 session_start() ;
session_destroy() ;

c'est-à-dire que vous ne pouvez pas détruire une session dans logout.php si vous avez initialisé votre session dans index.php. Vous devez démarrer la session dans logout.php avant de la détruire.

65voto

Andrea Faulds Points 2041

Après avoir utilisé session_destroy() , la session est détruite en coulisses. Pour une raison quelconque, cela n'affecte pas les valeurs dans $_SESSION , qui était déjà renseignée pour cette demande, mais il sera vide dans les demandes futures.

Vous pouvez effacer manuellement $_SESSION si vous le souhaitez ( $_SESSION = []; ).

18voto

mc10 Points 5494

Si vous devez effacer les valeurs de $_SESSION , définissez le tableau égal à un tableau vide :

 $_SESSION = array();

Bien sûr, vous ne pouvez pas accéder aux valeurs de $_SESSION sur une autre page une fois que vous avez appelé session_destroy , donc cela n'a pas beaucoup d'importance.

Essayez ce qui suit :

 session_destroy();
$_SESSION = array(); // Clears the $_SESSION variable

5voto

Alisso Points 335

J'ai également dû supprimer les cookies de session comme ceci :

 session_start(); 
$_SESSION = []; 

// 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();

Source : geeksforgeeks.org

4voto

yitwail Points 1293

En fait, cela fonctionne, mais vous devez également faire $_SESSION = array(); après la session_destroy pour vous débarrasser des variables $_SESSION. Cependant, évitez de faire unset($_SESSION) car cela rend les sessions inutiles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X