Как исправить проблему с устаревшей 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")){ }. Просто поставьте @ и проблема будет решена.