ScotlandPHP 2019


(PHP 4, PHP 5, PHP 7)

session_destroyDétruit une session


session_destroy ( void ) : bool

session_destroy() détruit toutes les données associées à la session courante. Cette fonction ne détruit pas les variables globales associées à la session, de même, elle ne détruit pas le cookie de session. Pour accéder à nouveau aux variables de session, la fonction session_start() doit être appelée de nouveau.

Note: Vous n'avez pas besoin d'appeler session_destroy() depuis le programme généralement. Nettoyer le tableau $_SESSION plutôt que de détruire les données de session.

Pour détruire complètement une session, l'identifiant de la session doit également être effacé. Si un cookie est utilisé pour propager l'identifiant de session (comportement par défaut), alors le cookie de session doit être effacé. La fonction setcookie() peut être utilisée pour cela.

Quand session.use_strict_mode est activé. Vous n'avez pas besoin d'effacer le cookies d'ID de session obsolète car le module de session n'accepte pas les cookies d'ID de sessions quand il n'y a pas données associer avec ces ID de sessions et définira un nouvel cookie d'ID de session. Activer session.use_strict_mode est recommandé pour tous les sites.


La suppression immédiate d'une session peut causer des résultats innatandus. Quand il y a des requêtes simultanées, les autres connexions peuvent soudainement perdre des données de session. Par exemple des requêtes depuis JavaScript et/ou des requêtes depuis des liens URL.

Bien que le module de session actuel n'accepte pas un cookie d'ID de session vide, mais la suppression immédiate de session peut provoquer un cookie d'ID de session vide à cause d'une condition de concurrence côté client (navigateur). Ceci provoquera la création de beaucoup d'ID de session inutile par le client.

Pour éviter ceci, vous devez définir un horodatage à $_SESSION et refuser l'accès à toutes les dates ultérieures. Ou assurer vous que votre applicatio n'a pas de requêtes simultanées. Ceci s'applique aussi à session_regenerate_id().

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.


Exemple #1 Destruction d'une session avec $_SESSION

// Initialisation de la session.
// Si vous utilisez un autre nom
// session_name("autrenom")

// Détruit toutes les variables de session
$_SESSION = array();

// Si vous voulez détruire complètement la session, effacez également
// le cookie de session.
// Note : cela détruira la session et pas seulement les données de session !
if (ini_get("session.use_cookies")) {
$params session_get_cookie_params();
setcookie(session_name(), ''time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]

// Finalement, on détruit la session.



Utilisez uniquement la fonction session_unset() pour l'ancien code obsolète qui n'utilise pas les variables $_SESSION.

Voir aussi

add a note add a note

User Contributed Notes 6 notes

Praveen V
6 years ago
If you want to change the session id on each log in, make sure to use session_regenerate_id(true) during the log in process.


[Edited by moderator (googleguy at php dot net)]
Jack Luo
4 years ago
It took me a while to figure out how to destroy a particular session in php. Note I'm not sure if solution provided below is perfect but it seems work for me. Please feel free to post any easier way to destroy a particular session. Because it's quite useful for functionality of force an user offline.

1. If you're using db or memcached to manage session, you can always delete that session entry directly from db or memcached.

2. Using generic php session methods to delete a particular session(by session id).

= 'nill2if998vhplq9f3pj08vjb1';
// 1. commit session if it's started.
if (session_id()) {

// 2. store current session id
$current_session_id = session_id();

// 3. hijack then destroy session specified.

// 4. restore current session id. If don't restore it, your current session will refer to the session you just destroyed!

1 year ago
I'm using PHP 7.1 and received the following warning when implementing Example #1, above:

    PHP message: PHP Warning:  session_destroy(): Trying to destroy uninitialized session in...

What I discovered is that clearing $_SESSION and removing the cookie destroys the session, hence the warning.  To avoid the warning while still keeping the value of using session_destroy(), do this after everything else:

    if (session_status() == PHP_SESSION_ACTIVE) { session_destroy(); }
11 years ago
Note that when you are using a custom session handler, session_destroy will cause a fatal error if you have set the session destroy function used by session_set_save_handler to private.

Fatal error: Call to private method Session::sessDestroy()

where sessDestroy was the function I specified in the 5th parameter of session_set_save_handler.

Even though it isn't all that desirable, the simple solution is to set sessDestroy to public.
2 years ago
For session_destroy() only destroy current session mean that if you specify name or change the save path of session etc  ,it will not destroy it mean for example


('testing') ;
session_start() ;

$_SESSION['id'] = '35' ;

() ;

session_destroy() ;

session_destroy only delete the new session which is created by session_start(). correct way is
('testing') ;
session_start() ;

session_destroy() ;

this is also valid for if you change path throught ini_set() , you have to mention in  delete.php.
remember session_destroy() function destroy  only current session not all .i hope this is worth to mention.
administrator at anorhack dot com
11 years ago
Destroying  a session from a background job

I have a thief-protection system that compares country codes from login IPs via whois. This has to run in the background as it is way too processor-hungry to be run in the browser.

What I needed was a way to destroy the web session from the background job. For some reason, a background session_destroy APPEARS to work, but doesnt't actually destroy the web session.

There is a work around, I set the username to NULL and the web code picks up on that, bouncing the user (thief) to a "gotcha" page where his IP is logged.

Yes I know its nasty and dirty, but surprisingly it works.

$sid = the session_id() of the suspicious web session, passed in $argv to the background job

The trick is to "stuff" the $_GET array with the sid, then the session_start in the background job picks this value up (as if it were a genuine trans-sid type thing...?PHPSESSID=blah) and "connects to" the web session. All $_SESSION variable can be viewed (and CHANGED , which is how this kludge works) but for some reason (that no doubt someone will illuminate) they can't be unset...setting the particular variable to NULL works well though:

// prove we are getting the web session data
foreach($_SESSION as $k => $v) echo($k."=".$v);
// now kill the thief
//web session variable now NULL - honestly!
To Top