Je pense avoir trouvé un bug sous PHP5 en ce qui concerne les sessions. Apparament une boucle foreach sur $_SESSION suivi d'un unset ne marche pas!
Voici un petit exemple histoire de bien comprendre tout ca
fichier: session_write.php
<?php
session_start();
$_SESSION["nom"] = "martin";
$_SESSION["prenom"] = "henri";
?>
fichier: session_clean.php
<?php
session_start();
foreach($_SESSION as $sessionKey => $sessionVal)
{
unset($_SESSION[$sessionKey]);
}
?>
fichier: session_view.php
<?php
session_start();
print "<pre>";
print_r($_SESSION);
print "</pre>";
?>
Scénario sous PHP 4:- appel de session_view.php => affiche un tableau vide
- appel de session_write.php => affiche rien, normal
- appel de session_view.php => affiche le tableau avec le nom et le prénom
- appel de session_clean.php => affiche rien, normal
- appel de session_view.php => affiche un tableau vide
et la ou ca se corse, c'est sous PHP 5:
- appel de session_view.php => affiche un tableau vide
- appel de session_write.php => affiche rien, normal
- appel de session_view.php => affiche le tableau avec le nom et le prénom
- appel de session_clean.php => affiche rien, normal
- appel de session_view.php => affiche toujours le tableau avec le nom et le prénom !!!
Une parade que j'utilise en attendant de trouver mieux ... utiliser un tableau temporaire:
fichier: session_clean.php
<?php
session_start();
foreach($_SESSION as $key=>$value)
{
$tmpSession[$key]=$value;
}
foreach($tmpSession as $sessionKey => $sessionVal)
{
unset($_SESSION[$sessionKey]);
}
?>
Si quelqu'un a une explication ...