43 votes

Avertissement sur les effets secondaires des sessions PHP avec des variables globales comme source de données

J'essaie d'héberger un site Web PHP qui m'a été donné. Je vois cet avertissement :

Attention : Inconnu : Votre script peut éventuellement s'appuie sur un effet secondaire de session qui qui existait jusqu'à PHP 4.2.3. Veuillez être informé que l'extension de session ne considère pas les variables globales comme comme une source de données, à moins que register_globals soit activé. Vous pouvez désactiver cette fonctionnalité et cet avertissement en définissant session.bug_compat_42 ou session.bug_compat_warn à off, respectivement. dans Inconnu en ligne 0

Qu'est-ce que cela signifie ? Comment puis-je trouver la source de ce problème dans le code ?

99voto

Owen Points 36009

En fait, vous avez une variable avec le même nom que votre session. ex :

$_SESSION['var1'] = null;
$var1 = 'something';

qui reproduira cette erreur. vous pouvez empêcher PHP d'essayer de trouver des variables existantes et de vous en avertir en ajoutant ces lignes à votre script :

ini_set('session.bug_compat_warn', 0);
ini_set('session.bug_compat_42', 0);

ces valeurs peuvent également être définies dans le php.ini ou le .htaccess.

6voto

Kzqai Points 7484

Il semble y avoir quelques possibilités problématiques ici :

http://www.spiration.co.uk/post/1231/Your-script-possiblement-reliés-sur-une-session-effet secondaire

dit que les cas comme celui-ci :

$_SESSION['firstname']=$_REQUEST['firstname'];

déclenchera l'avertissement.

De plus, j'interprète ce contenu de bug php : http://bugs.php.net/bug.php?id=41540 pour signifier que cette erreur peut également se produire lorsque vous affectez une variable à la superglobale de session qui n'est pas encore initialisée, par ex.

//Start of script
$_SESSION['bob'] = $bob;

5voto

Ian Points 156

Il s'agit d'une bonne information pour trouver la cause de l'avertissement, mais je recommande de NE PAS désactiver les avertissements mentionnés par Owen. Ces fonctions d'exécution sont supprimé dans PHP 5.4.0 et le développeur devrait prendre l'habitude d'éviter une telle utilisation des variables.

Pour remédier à cela, cela peut être un problème pour les développeurs, mais si vous avez

$_SESSION["user"]
$user;

renommer la session en

$_SESSION["sessuser"];

Ou vice-versa, pour autant que le nom de la session et le nom de la variable soient différents. Pensez-y de cette façon : lorsque vous passez à la dernière version, vous devrez de toute façon déboguer votre code.

2voto

Praveen Kannan Points 11

Lorsque vous apportez des modifications au fichier .htaccess, ini_set ne fonctionne pas. Vous devrez le faire comme :

php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0

1voto

TARA Points 314

Dans mon cas, le php.ini est passé de "on" à "off".

comme ceci :

session.bug_compat_42 = off
session.bug_compat_warn = off

si cela ne fonctionne pas, redémarrez apache

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X