1

以下代码在随机页面上的输出是:

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

是 :

1
2

我的登录用户 ID 正在更改!:@

登录(验证)页面的代码是这样的:

        // 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
4

3 回答 3

6

您所看到的是register_globals. 基本上:

$uid

$_SESSION['uid']

引用相同的变量,所以当你这样做时:

$uid = $_GET['ID'];

它相当于:

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

我的建议?关闭寄存器全局变量。它在 PHP 5.3 中已弃用,将在 PHP 6 中删除。要关闭它,请编辑 php.ini 文件并更改为以下指令:

register_globals = Off

然后重新启动 Apache(或任何您的 Web 服务器)。

于 2010-01-17T02:10:18.077 回答
2

这很奇怪......你确定你没有在$_SESSION['uid']++任何地方做吗?

还有,你有register_globals吗?

于 2010-01-17T02:06:34.340 回答
1

register_globals should be off by default.

Is there some call to session_register anywhere?

于 2010-01-17T02:20:37.007 回答