开发者

Local vars interfere with $_SESSION vars?

The output of the following code on a random page is :

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

is :

1
2

My logged in User ID is changing ! :@

The code for the login (authenticate) page is something like this :

        // Authenticate
        $query = "SELECT * FROM User WHERE Email = '".$Email."' AND Password = '".$Passwo开发者_JS百科rd."'";
        $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


What you're seeing is a side-effect of register_globals. Basically:

$uid

and

$_SESSION['uid']

reference the same variable so when you do:

$uid = $_GET['ID'];

it's the equivalent of:

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

My advice? Turn off register globals. It's deprecated in PHP 5.3 and will be removed in PHP 6. To turn it off, edit your php.ini file and change to this directive:

register_globals = Off

then restart Apache (or whatever your Web server is).


That's weird... Are you sure you're not doing $_SESSION['uid']++ anywhere?

Also, do you have register_globals on?


register_globals should be off by default.

Is there some call to session_register anywhere?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜