Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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;

Ответ 3

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

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

$_SESSION["user"]
$user;

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

$_SESSION["sessuser"];

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

Ответ 4

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

php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0

Ответ 5

в моем случае, php.ini изменится с on на off

вот так:

session.bug_compat_42 = off
session.bug_compat_warn = off

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