Как исправить проблему session_register() устаревшую в PHP 5.3
Не используйте его. В описании говорится:
Зарегистрируйте одну или несколько глобальных переменных с текущим сеансом.
Две вещи, которые пришли мне на ум:
$_SESSION['var'] = "value" . См. Также предупреждения из руководства :
Если вы хотите, чтобы ваш скрипт работал независимо от
register_globals, вам нужно вместо этого использовать массив$_SESSIONпоскольку записи$_SESSIONавтоматически регистрируются. Если ваш скрипт используетsession_register(), он не будет работать в средах, где директиваregister_globalsPHP отключена.
Это очень важно, потому что директива 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")){ } . Просто поставьте @ и проблема решена.