2009-12-28 5 views
2

Comment la boucle foreach peut-elle affecter la variable de session? Lorsque j'exécute ce code sur certains sites Web, sa sortie est OK.PHP - foreach affecte la valeur de la session

Session content 
test 
array 
something 
array end 

Session content after foreach: Session content 

Mais seulement à la première exécution (lorsque la session est créée). Lorsque j'exécute ce code deuxième fois (session est déjà créée) sa sortie ressemble à ceci:

Session content 
test 
array 
something 
array end 

Session content after foreach: array end 

Je ne sais pas comment la variable $ test affecte $ _SESSION [Test].

Répondre

13

Je vous parie que vous utilisez register globals et cela signifie que si vous avez une variable de session nommée test, il deviendra une variable globale nommée $test lorsque vous exécutez session_start(). Votre boucle modifie ensuite la valeur $test, qui est une référence globale à la variable de session.

Voir Using Register Globals et register_globals directive.

Fondamentalement, c'est une bonne leçon pourquoi vous ne devriez pas utiliser globals de registre. Dans ce cas, le conflit de noms est probablement inoffensif, mais vous pouvez potentiellement créer d'énormes problèmes de cette façon, même des vulnérabilités aux attaques.

+0

+1: belle prise! Je ne comprenais pas comment le problème décrit pourrait se produire, et n'ai pas pensé à register_global - après avoir réglé register_global = On, je reproduis le problème ^^ ;; et si je le pouvais, je vous donnerais un autre +1 pour "vous ne devriez pas utiliser globals de registre" –

+0

+1 pour voir ce qui se passait. La clé de tableau sans guillemets était un peu rouge. –

+0

+1 Je ne connaissais pas register_globals, merci de m'avoir expliqué! – dusan

Questions connexes