web-dev-qa-db-fra.com

PHP avertissement d'effets secondaires de session 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 repose peut-être sur un effet secondaire de session qui existait jusqu'à PHP 4.2.3. Veuillez noter que l'extension de session ne prend pas en compte les variables globales comme source de données, sauf si register_globals est activé. Vous pouvez désactiver cette fonctionnalité et cet avertissement en désactivant respectivement session.bug_compat_42 ou session.bug_compat_warn. in nknown on line

Qu'est-ce que ça veut dire? Comment pourrais-je retrouver la source de ce problème dans le code?

43
Zack Peterson

fondamentalement, 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 php.ini ou .htaccess

99
Owen

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

http://www.spiration.co.uk/post/1231/Your-script-possably-relies-on-a-session-side-effect

dit que des cas comme celui-ci:

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

déclenchera l'avertissement.

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

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

C'est une bonne information pour savoir ce qui cause l'avertissement, mais je recommanderais de NE PAS fermer les avertissements mentionnés par Owen. Ces fonctions d'exécution sont supprimées dans PHP 5.4. et le développeur devrait se mettre à la pratique d'éviter une telle utilisation des variables.

Pour résoudre ce problème, cela peut être pénible pour les développeurs, mais si vous avez

$_SESSION["user"]
$user;

renommer la session en

$_SESSION["sessuser"];

Ou vice-versa tant que le nom de session et le nom de variable sont différents. Pensez-y de cette façon: lorsque vous effectuez une mise à niveau vers la dernière version, vous devrez de toute façon déboguer votre code.

5
Ian

Lorsque vous apportez des modifications au .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
2
Praveen Kannan

dans mon cas, php.ini passe de on à off

comme ça :

session.bug_compat_42 = off
session.bug_compat_warn = off

si cela ne fonctionne pas, redémarrez Apache

1
TARA