Dans ce post nous allons parler des sessions avec PHP et plus particulièrement de leurs destruction.
Croisé sur le net :
- session_unset() ne doit pas étre utilisé car il détruira également la super globale $_SESSION qui deviendra inutilisable.
- On doit utiliser $_SESSION = array() puis session_unset() avant de "destroy"
- Il est inutile de vider $_SESSION si on fait un session_destroy()
- $_SESSION = array() et session_unset() font exactement la même chose
- Bien sur c'est faux. session_unset va entre autre vider $_SESSION, en revanche si l'on indique session_unset($_SESSION) on rigole jaune. C'est au passage indiqué sur le man de PHP ...
- Encore une idée étrange. Les deux vont faire une chose, c'est vider $_SESSION. Alors hors idée perverse d'utiliser le double de ressources c'est pas utile.
- session_destroy() vas détruire le fichier de session, mais ne vide pas la mémoire. On peut donc toujours accéder aux données.
- C'est pas si faux que ça et en vulgarisation c'est le cas. La seul différence est que session_unset(), va vérifier si ce qui est passé en arguments correspond bien à une "php_session_active".
Je vois déjà des "c'est bien beau, mais comment on peut savoir si toi aussi tu racontes pas des conneries ?"
Pour le 1er et 2eme points il est simple de vérifier : http://php.net/manual/fr/function.session-unset.php
Pour le 2eme point on peut tout de même vérifier :
<?php session_start(); $_SESSION['time'] = time(); session_unset(); var_dump($_SESSION); $_SESSION = array(); var_dump($_SESSION);
Le 3eme points est très simple à tester :
<?php session_start(); $_SESSION['time'] = time(); $a = &$_SESSION; session_destroy(); var_dump($a);
Le 4eme points ce trouve dans la source de php :
static PHP_FUNCTION(session_unset) { if (PS(session_status) != php_session_active) { RETURN_FALSE; } IF_SESSION_VARS() { HashTable *ht_sess_var = Z_ARRVAL_P(Z_REFVAL(PS(http_session_vars))); /* Clean $_SESSION. * zend_hash_clean(ht_sess_var); } }
Petite Astuce : Pour vraiment faire le ménage de la session ajoutez setcookie(session_name(),'',0,'/'); ce qui supprime le cookie utilisateur de sa session terminée.
éa, les amis.