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!
Les globals de registre sont-ils activés? – erisco