Как исправить проблему с устаревшей session_register()
в PHP 5.3
Как исправить устаревшую проблему session_register()?
Ответ 1
Не используйте его. В описании говорится:
Зарегистрируйте одну или несколько глобальных переменных с текущим сеансом.
Две вещи, которые пришли мне на ум:
- Использование глобальных переменных в любом случае не очень хорошо, найдите способ их избежать.
- Вы все еще можете установить переменные с
$_SESSION['var'] = "value"
.
См. также предупреждения из manual:
Если вы хотите, чтобы ваш script работал независимо от
register_globals
, вам нужно вместо этого использовать массив$_SESSION
, поскольку записи$_SESSION
автоматически регистрируются. Если ваш script используетsession_register()
, он будет не работать в средах, где директива PHPregister_globals
отключена.
Это очень важно, потому что директива register_globals
установлена по умолчанию False
!
Далее:
Здесь регистрируется переменная
global
. Если вы хотите зарегистрировать переменную сеанса из функции, вам необходимо сделать ее глобальной с помощью ключевого словаglobal
или массива$GLOBALS[]
или использовать специальные сеансовые массивы, как указано ниже.
и
Если вы используете
$_SESSION
(или$HTTP_SESSION_VARS
), не используйтеsession_register()
,session_is_registered()
иsession_unregister()
.
Ответ 2
Используйте $_SESSION
напрямую для установки переменных. Как это:
$_SESSION['name'] = 'stack';
Вместо:
$name = 'stack';
session_register("name");
Ответ 3
до PHP 5.3
session_register("name");
поскольку PHP 5.3
$_SESSION['name'] = $name;
Ответ 4
если вам нужна резервная функция, вы можете использовать этот
function session_register($name){
global $$name;
$_SESSION[$name] = $$name;
$$name = &$_SESSION[$name];
}
Ответ 5
Чтобы дополнить Felix Kling, я изучал кодовую базу, которая имела следующий код:
if (is_array($start_vars)) {
foreach ($start_vars as $var) {
session_register($var);
}
} else if (!(empty($start_vars))) {
session_register($start_vars);
}
Чтобы не использовать session_register, они внесли следующие настройки:
if (is_array($start_vars)) {
foreach ($start_vars as $var) {
$_SESSION[$var] = $GLOBALS[$var];
}
} else if (!(empty($start_vars))) {
$_SESSION[$start_vars] = $GLOBALS[$start_vars];
}
Ответ 6
Нам просто нужно использовать @
перед устаревшей функцией. Не нужно ничего менять, как упоминалось выше. Например: if([email protected]_is_registered("username")){ }
. Просто поставьте @
и проблема будет решена.