par
Invité » 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
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 ...
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: [b]session_write.php[/b]
[php]<?php
session_start();
$_SESSION["nom"] = "martin";
$_SESSION["prenom"] = "henri";
?>[/php]
fichier: [b]session_clean.php[/b]
[php]<?php
session_start();
foreach($_SESSION as $sessionKey => $sessionVal)
{
unset($_SESSION[$sessionKey]);
}
?>[/php]
fichier: [b]session_view.php[/b]
[php]<?php
session_start();
print "<pre>";
print_r($_SESSION);
print "</pre>";
?>[/php]
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: [b]session_clean.php[/b]
[php]<?php
session_start();
foreach($_SESSION as $key=>$value)
{
$tmpSession[$key]=$value;
}
foreach($tmpSession as $sessionKey => $sessionVal)
{
unset($_SESSION[$sessionKey]);
}
?>[/php]
Si quelqu'un a une explication ...