2010-09-23 7 views
1

J'ai rencontré un problème très étrange en ce qui concerne les variables de session et les variables locales dans php. J'essaie de comprendre si je ne comprends pas quelque chose sur les sessions en php ou si c'est un problème avec la version php que mon hôte utilise.Variables de session PHP interchangées avec des variables locales?

Voici un code très simple de démontrer la question bizarre:

session_start(); 
var_dump($kenny); 
var_dump($_SESSION['kenny']); 
$_SESSION['kenny']='def'; 
var_dump($kenny); 
var_dump($_SESSION['kenny']); 
$kenny = 'abc'; 
var_dump($kenny); 
var_dump($_SESSION['kenny']); 

La première fois que je lance le code, je reçois les résultats suivants (comme l'on peut attendre):

NULL NULL NULL string(3) "def" string(3) "abc" string(3) "def" 

Je le cours une seconde fois (sans fermer mon navigateur, bien sûr), je reçois ça maintenant! Je l'exécute une 3ème, 4ème, 5ème fois et ainsi de suite, j'obtiens ceci !!!

string(3) "abc" string(3) "abc" string(3) "def" string(3) "def" string(3) "abc" string(3) "abc" 

Il me semble que la variable de session « kenny » et variable locale kenny $ deviennent des alias à l'un et l'autre après l'exécution du script plus d'une fois. hmm ... Je ne pense vraiment pas que c'est ainsi que fonctionnent les variables de session et les variables locales en php. Corrigez-moi s'il me manque quelque chose ici.

Mon hébergeur exécute PHP 5.2.2. Lorsque je tente ce même code sur d'autres hôtes en cours d'exécution PHP 5.2.1, 5.2.14 et 5.3.1, ils me donnent toujours ce que je pense:

1ère fois:

NULL NULL NULL string(3) "def" string(3) "abc" string(3) "def" 

par la suite:

NULL string(3) "def" NULL string(3) "def" string(3) "abc" string(3) "def" 

J'ai vérifié le journal des modifications sur php.net et n'a pas trouvé tout ce que je peux rapporter à qui peut répondre à cette question. Mais comme je l'ai mentionné, une version antérieure (5.2.1) fonctionne bien, ce qui me laisse perplexe.

Si quelqu'un utilise une autre version de php 5.2.x, essayez-le et faites le moi savoir si vous voyez le même problème. Ou si quelqu'un a un aperçu de la question, j'apprécierais vraiment tout commentaire.

Merci mille fois!

+3

Les globals de registre sont-ils activés? – erisco

Répondre

1

Ceci est probablement dû au fait que la directive register_globals est activée. Il ne dit pas sur cette page que $_SESSION variables sont incluses, mais il dit here:

Si register_globals est activé, puis les variables globales et les $_SESSION entrées seront automatiquement référence les mêmes valeurs qui étaient enregistré dans la session précédente instance. Cependant, si la variable est enregistrée par $_SESSION alors la variable globale est disponible depuis la demande suivante .

+0

Merci beaucoup!Cette page expliquait tout pour moi! J'ai toujours eu register_globals off et supposé qu'il serait éteint après l'avoir téléchargé sur le serveur (mauvaise hypothèse de ma part). C'est exactement le problème. J'espère que les autres peuvent être aidés par cette réponse! – JoJoeDad

Questions connexes