Session et unset

Invité
Invité n'ayant pas de compte PHPfrance

08 mars 2007, 18:11

Bonjours à tous.
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 :D

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 !!! :evil:

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 ...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

09 mars 2007, 16:54

unset() détruit la variable mais pas la session...il faut faire un session_destroy()
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Invité
Invité n'ayant pas de compte PHPfrance

09 mars 2007, 17:50

Le but n'est pas de détruire la session mais simplement certaines variables qu'elle contient.
Dans l'exemple il est vrai que je tente de detruire toutes les variables de session, ce qui revient a détruire la session elle même ... mais c'est juste un exemple :wink:

ViPHP
ViPHP | 1996 Messages

09 mars 2007, 18:22

Est ce que
unset $_SESSION["nom"]
tout seul fonctionne ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr