par
Ajoloca » 01 févr. 2007, 20:59
Bonjour,
session_destroy() ne détruit pas les variables globales, c'est à dire les $_SESSION['qq_chose'], ni le cookie coté utilisateur(si c'est l'option choisie -- c'est celle par défaut). Il faut le faire à la main.
La première des choses à faire c'est de récupérer le nom de la session pour pouvoir supprimer le cookie.
$session_name = isset($_COOKIE[session_name()]) ? session_name() : '';
Je vous propose deux soluces pour la partie des variables globales:
1 - En utilisant $_SESSION = Array(), et laisser faire le reste du travail au garbage colector (ça risque de prendre un certain temps (paramétrage serveur).
2- En supprimant une à une les globales de session
foreach($_SESSION as $key => $value) { unset($_SESSION[$key]); }
C'est la solution que je conseille.
Ensuite supprimer le cookie
if (!empty($session_name)) {
setcookie(session_name(), '', time()-42000, '/');
}
Et c'est seulement maintenant que l'on détruit la session.
Au total ça nous donnerait un code comme ceci (je suppose que vous laissez PHP attribuer le nom de la session)
session_start();
// On récupère le nom (la session a peut-être été initialisée dans une autre page)
$session_name = isset($_COOKIE[session_name()]) ? session_name() : '';
// Destruction des globales de session
foreach($_SESSION as $key => $value) { unset($_SESSION[$key]); }
// Destruction du cookie (il n'a peut-être pas encore été créé)
if (!empty($session_name)) {
setcookie(session_name(), '', time()-42000, '/')
};
// Destruction de la session
session_destroy();
// Génération d'une nouvelle session
session_start();