Предупреждение о побочных эффектах сеанса PHP с глобальными переменными в качестве источника данных - PullRequest
43 голосов
/ 06 октября 2008

Я пытаюсь разместить сайт PHP, который мне дали. Я вижу это предупреждение:

Предупреждение: Неизвестно: возможно, ваш скрипт опирается на побочный эффект сеанса, который существовал до PHP 4.2.3. Пожалуйста, будьте посоветовал продлить сеанс не считает глобальные переменные источник данных, если register_globals включен. Вы можете отключить эту функцию и это предупреждение по настройке session.bug_compat_42 или session.bug_compat_warn отключить, соответственно. в Неизвестно в линии 0

Что это значит? Как я могу отследить источник этой проблемы в коде?

Ответы [ 5 ]

99 голосов
/ 06 октября 2008

в основном у вас есть переменная с тем же именем, что и ваша сессия. например:

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

, который будет воспроизводить эту ошибку. Вы можете остановить PHP от попыток найти существующие переменные и предупредить вас о них, добавив следующие строки в ваш скрипт:

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

эти значения также могут быть установлены в php.ini или .htaccess

6 голосов
/ 15 февраля 2010

Здесь, кажется, есть несколько проблемных возможностей:

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

говорит, что такие случаи:

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

вызовет предупреждение.

Кроме того, я интерпретирую это содержание ошибки php: http://bugs.php.net/bug.php?id=41540, чтобы означать, что эта ошибка также может возникать, когда вы назначаете переменную суперглобальному сеансу, которая еще не инициализирована, например

//Start of script
$_SESSION['bob'] = $bob;
5 голосов
/ 18 мая 2012

Это хорошая информация для выяснения причины предупреждения, но я бы порекомендовал НЕ отключать предупреждения, о которых упоминает Оуэн. Эти функции времени выполнения удалены в PHP 5.4.0 , и разработчик должен на практике избегать такого использования переменных.

Чтобы это исправить, разработчикам может быть больно, но если у вас есть

$_SESSION["user"]
$user;

переименуйте сессию в

$_SESSION["sessuser"];

Или наоборот, если имя сеанса и имя переменной различаются. Подумайте об этом так: когда вы обновляетесь до последней сборки, вам все равно придется отлаживать код.

2 голосов
/ 27 апреля 2012

При внесении изменений в .htaccess ini_set не работает. Вам нужно будет сделать это как:

php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0
1 голос
/ 13 марта 2015

в моем случае php.ini меняется с на * off

как это:

session.bug_compat_42 = off
session.bug_compat_warn = off

если не работает, перезапустите apache

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...