Предупреждение о побочном эффекте сеанса PHP с глобальными переменными как источник данных

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

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

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

Related of "Предупреждение о побочном эффекте сеанса PHP с глобальными переменными как источник данных"

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

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

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

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

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

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

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; 

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

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

 $_SESSION["user"] $user; 

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

 $_SESSION["sessuser"]; 

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

Когда вы вносите изменения в .htaccess, ini_set не работает. Вам нужно будет сделать это как:

 php_flag session.bug_compat_42 0 php_flag session.bug_compat_warn 0 

в моем случае, изменение php.ini от включения до выключения

как это :

 session.bug_compat_42 = off session.bug_compat_warn = off 

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