Местные переменные мешают переменным $ _SESSION? - PullRequest
1 голос
/ 17 января 2010

Вывод следующего кода на случайной странице:

            print $_SESSION['uid']; // logged in user
        // Get Data .
        $uid = $_GET['ID']; // part of random page processing
            print $_SESSION['uid'];

это:

1
2

Мой зарегистрированный идентификатор пользователя меняется! : @

Код для страницы входа (аутентификации) выглядит примерно так:

        // Authenticate
        $query = "SELECT * FROM User WHERE Email = '".$Email."' AND Password = '".$Password."'";
        $result = mysql_query($query);

        // Authenticated?
        if(mysql_num_rows($result)) {
            // Yes

            // Set session Vars
            $uid = mysql_result($result,0,ID);
            $Access = mysql_result($result,0,Access);

            session_destroy();
            session_start();
            $_SESSION['loggedIN'] = 1;
            $_SESSION['Access'] = $Access;
            $_SESSION['uid'] = $uid;

            // Print a successful login and redirect

Ответы [ 3 ]

6 голосов
/ 17 января 2010

То, что вы видите, является побочным эффектом register_globals.В основном:

$uid

и

$_SESSION['uid']

ссылаются на одну и ту же переменную, поэтому когда вы делаете:

$uid = $_GET['ID'];

, это эквивалентно:

$SESSION['uid'] = $_GET['ID'];

Мой совет?Отключить регистр глобалов.Он устарел в PHP 5.3 и будет удален в PHP 6. Чтобы отключить его, отредактируйте файл php.ini и измените его на следующую директиву:

register_globals = Off

, затем перезапустите Apache (или любой другой веб-сервер).

2 голосов
/ 17 января 2010

Это странно ... Вы уверены, что нигде не делаете $_SESSION['uid']++?

Кроме того, у вас есть register_globals на?

1 голос
/ 17 января 2010

register_globals должно быть выключено по умолчанию.

Есть ли какой-нибудь вызов session_register где-нибудь?

...