Предупреждение о побочных эффектах сессии PHP - как решить? - PullRequest
2 голосов
/ 21 декабря 2010

Я довольно новичок в php, и уверен, что это легко, но я бы хотел сделать это правильно. У меня есть этот скрипт:

<?php
if ($_POST["username"]=="") {
    include($_SERVER['DOCUMENT_ROOT'] ."/login.inc.php");
} else { 
    $username=$_POST["username"];
    $password=$_POST["password"];
    session_start();
    if ($username=="bob" AND $password=="123"){ $permission="yes";}
    $username=$_POST["username"];
    session_register("permission");   
    session_register("username");  

    if ($permission=="yes"){
        // Show stuff
    }
}
?>

Извините за странное форматирование моего кода - похоже, он не может отображаться правильно.

Итак, я получаю эту ошибку:

Предупреждение: неизвестно: возможно, ваш сценарий основан на побочном эффекте сеанса, существовавшем до PHP 4.2.3. Обращаем ваше внимание, что расширение сеанса не рассматривает глобальные переменные как источник данных, если не включен параметр register_globals. Вы можете отключить эту функцию и это предупреждение, установив для session.bug_compat_42 или session.bug_compat_warn значение off, соответственно в Unknown в строке 0

То, что я предполагаю, означает, что мне нужно изменить одно из имен моих переменных, чтобы оно не конфликтовало с переменной сеанса, верно? Это то, что я прочитал, но я не уверен, что изменить.

Может кто-нибудь помочь / показать мне, пожалуйста?

Спасибо

осу

Ответы [ 2 ]

3 голосов
/ 21 декабря 2010

Это происходит из-за

session_register("username");  

Не рекомендуется и не рекомендуется с PHP 5.3.

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

Источник .

Как мы все знаем, register_globals ужасен, и всегда должен быть выключен.

Наиболее распространенный способ регистрации сеансовой переменной - с помощью $_SESSION superglobal, т.е.

$_SESSION['username'] = $username;
0 голосов
/ 21 декабря 2010

Вам лучше начать избавляться от устаревших функций, таких как session_register ().

Используйте массив $ _SESSION, например,

$_SESSION['username'] = $_POST['username'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...