Как исправить проблему session_register()
устаревшую в PHP 5.3
Не используйте его. В описании говорится:
Зарегистрируйте одну или несколько глобальных переменных с текущим сеансом.
Две вещи, которые пришли мне на ум:
$_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")){ }
. Просто поставьте @
и проблема решена.