Question

Je suis donc en train de faire de la maintenance sur un site PHP qui utilise des variables $ _SESSION . J'ai commencé à voir un comportement très très étrange et après des heures de débogage, je viens de comprendre cela. Par exemple, disons que j'ai une configuration de variable de session comme celle-ci:

Je suis donc en train de faire de la maintenance sur un site PHP qui utilise des variables $ _SESSION . J'ai commencé à voir un comportement très très étrange et après des heures de débogage, je viens de comprendre cela. Par exemple, disons que j'ai une configuration de variable de session comme celle-ci:

$sql = "SELECT whatever FROM table";
$user = $db->fetchRow($sql);

À un moment donné dans un script, un appel à une table MySQL est effectué à l'aide de certaines classes Zend:

<*>

Maintenant, c’est ici que l’étrange commence ... Après cet appel de base de données, ma valeur de tableau $ _SESSION ['utilisateur'] est soudainement modifiée pour devenir l’objet récupéré. à partir de l'appel de base de données ...

Fondamentalement: $ _SESSION ['utilisateur'] est maintenant identique à l'objet qui a été extrait à l'aide de la méthode fetchRow DB qui devait être stockée dans la variable $ utilisateur . Je n'ai jamais vu cela auparavant.

La seule chose que je puisse comprendre est que le nom de variable $ user est identique au nom de clé de tableau $ _SESSION ['utilisateur'] , il agit comme comme un raccourci ou quelque chose.

S'agit-il d'une sorte de raccourcis étranges de la session PHP dont je n'avais jamais entendu parler auparavant?

En passant, je sais qu’accéder directement à $ _ SESSION n'est pas la meilleure pratique. Je n'ai pas construit ce site. Mon travail consiste simplement à réparer certaines choses et à ajouter des fonctionnalités.

UPDATE: Effectivement, register_globals est activé. Merci pour l'aide rapide les gars. Pas étonnant que je voie un tel comportement étrange.

SESSION['user']['id'] = 123;

Je suis donc en train de faire de la maintenance sur un site PHP qui utilise des variables $ _SESSION . J'ai commencé à voir un comportement très très étrange et après des heures de débogage, je viens de comprendre cela. Par exemple, disons que j'ai une configuration de variable de session comme celle-ci:

<*>

À un moment donné dans un script, un appel à une table MySQL est effectué à l'aide de certaines classes Zend:

<*>

Maintenant, c’est ici que l’étrange commence ... Après cet appel de base de données, ma valeur de tableau $ _SESSION ['utilisateur'] est soudainement modifiée pour devenir l’objet récupéré. à partir de l'appel de base de données ...

Fondamentalement: $ _SESSION ['utilisateur'] est maintenant identique à l'objet qui a été extrait à l'aide de la méthode fetchRow DB qui devait être stockée dans la variable $ utilisateur . Je n'ai jamais vu cela auparavant.

La seule chose que je puisse comprendre est que le nom de variable $ user est identique au nom de clé de tableau $ _SESSION ['utilisateur'] , il agit comme comme un raccourci ou quelque chose.

S'agit-il d'une sorte de raccourcis étranges de la session PHP dont je n'avais jamais entendu parler auparavant?

En passant, je sais qu’accéder directement à $ _ SESSION n'est pas la meilleure pratique. Je n'ai pas construit ce site. Mon travail consiste simplement à réparer certaines choses et à ajouter des fonctionnalités.

UPDATE: Effectivement, register_globals est activé. Merci pour l'aide rapide les gars. Pas étonnant que je voie un tel comportement étrange.

SESSION['user']['firstname'] = 'John';

Je suis donc en train de faire de la maintenance sur un site PHP qui utilise des variables $ _SESSION . J'ai commencé à voir un comportement très très étrange et après des heures de débogage, je viens de comprendre cela. Par exemple, disons que j'ai une configuration de variable de session comme celle-ci:

<*>

À un moment donné dans un script, un appel à une table MySQL est effectué à l'aide de certaines classes Zend:

<*>

Maintenant, c’est ici que l’étrange commence ... Après cet appel de base de données, ma valeur de tableau $ _SESSION ['utilisateur'] est soudainement modifiée pour devenir l’objet récupéré. à partir de l'appel de base de données ...

Fondamentalement: $ _SESSION ['utilisateur'] est maintenant identique à l'objet qui a été extrait à l'aide de la méthode fetchRow DB qui devait être stockée dans la variable $ utilisateur . Je n'ai jamais vu cela auparavant.

La seule chose que je puisse comprendre est que le nom de variable $ user est identique au nom de clé de tableau $ _SESSION ['utilisateur'] , il agit comme comme un raccourci ou quelque chose.

S'agit-il d'une sorte de raccourcis étranges de la session PHP dont je n'avais jamais entendu parler auparavant?

En passant, je sais qu’accéder directement à $ _ SESSION n'est pas la meilleure pratique. Je n'ai pas construit ce site. Mon travail consiste simplement à réparer certaines choses et à ajouter des fonctionnalités.

UPDATE: Effectivement, register_globals est activé. Merci pour l'aide rapide les gars. Pas étonnant que je voie un tel comportement étrange.

SESSION['user']['lastname'] = 'Doe';

À un moment donné dans un script, un appel à une table MySQL est effectué à l'aide de certaines classes Zend:

<*>

Maintenant, c’est ici que l’étrange commence ... Après cet appel de base de données, ma valeur de tableau $ _SESSION ['utilisateur'] est soudainement modifiée pour devenir l’objet récupéré. à partir de l'appel de base de données ...

Fondamentalement: $ _SESSION ['utilisateur'] est maintenant identique à l'objet qui a été extrait à l'aide de la méthode fetchRow DB qui devait être stockée dans la variable $ utilisateur . Je n'ai jamais vu cela auparavant.

La seule chose que je puisse comprendre est que le nom de variable $ user est identique au nom de clé de tableau $ _SESSION ['utilisateur'] , il agit comme comme un raccourci ou quelque chose.

S'agit-il d'une sorte de raccourcis étranges de la session PHP dont je n'avais jamais entendu parler auparavant?

En passant, je sais qu’accéder directement à $ _ SESSION n'est pas la meilleure pratique. Je n'ai pas construit ce site. Mon travail consiste simplement à réparer certaines choses et à ajouter des fonctionnalités.

UPDATE: Effectivement, register_globals est activé. Merci pour l'aide rapide les gars. Pas étonnant que je voie un tel comportement étrange.

Était-ce utile?

La solution

On dirait que register_globals est défini sur On dans PHP.ini. Le désactiver devrait résoudre ce problème.

Si vous n'avez pas accès à la modification de PHP.ini, une solution alternative est proposée ici

Autres conseils

Vérifiez si enregistrer les données globales est activé. Accéder à $ _SESSION est le seul moyen d'accéder aux données de session en toute sécurité. .

Register globals est une ancienne fonctionnalité qui transformait les variables globales en variables locales. Le problème était que vous ne pouviez pas savoir en toute sécurité d'où venaient les données. Vous pouvez définir quelque chose que vous attendez d'une session avec une variable get, post ou cookie. Il était donc très facile de contourner la sécurité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top