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

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

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

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

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

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

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

См. Также предупреждения из руководства :

Если вы хотите, чтобы ваш скрипт работал независимо от register_globals , вам нужно вместо этого использовать массив $_SESSION поскольку записи $_SESSION автоматически регистрируются. Если ваш скрипт использует session_register() , он не будет работать в средах, где директива register_globals PHP отключена.

Это очень важно, потому что директива register_globals по умолчанию установлена ​​в значение False !

В дальнейшем:

Это регистрирует global переменную. Если вы хотите зарегистрировать переменную сеанса изнутри функции , вам необходимо сделать ее глобальной, используя ключевое слово global или массив $GLOBALS[] , или использовать специальные сеансовые массивы, как указано ниже.

а также

Если вы используете $_SESSION (или $HTTP_SESSION_VARS ), не используйте session_register() , session_is_registered() и session_unregister() .

Используйте $_SESSION непосредственно для установки переменных. Как это:

 $_SESSION['name'] = 'stack'; 

Вместо:

 $name = 'stack'; session_register("name"); 

Подробнее здесь

перед PHP 5.3

 session_register("name"); 

поскольку PHP 5.3

 $_SESSION['name'] = $name; 

если вам нужна резервная функция, вы можете использовать эту

 function session_register($name){ global $$name; $_SESSION[$name] = $$name; $$name = &$_SESSION[$name]; } 

В дополнение к ответу Феликса Клинга я изучал кодовую базу, которая имела следующий код:

 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]; } 

Нам просто нужно использовать @ перед устаревшей функцией. Не нужно ничего менять, как упоминалось выше. Например: if(!@session_is_registered("username")){ } . Просто поставьте @ и проблема решена.