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

Как исправить устаревшую проблему session_register()?

Как исправить проблему с устаревшей session_register() в PHP 5.3

4b9b3361

Ответ 1

Не используйте его. В описании говорится:

Зарегистрируйте одну или несколько глобальных переменных с текущим сеансом.

Две вещи, которые пришли мне на ум:

  • Использование глобальных переменных в любом случае не очень хорошо, найдите способ их избежать.
  • Вы все еще можете установить переменные с $_SESSION['var'] = "value".

См. также предупреждения из manual:

Если вы хотите, чтобы ваш script работал независимо от register_globals, вам нужно вместо этого использовать массив $_SESSION, поскольку записи $_SESSION автоматически регистрируются. Если ваш script использует session_register(), он будет не работать в средах, где директива PHP register_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")){ }. Просто поставьте @ и проблема будет решена.