本地变量会干扰$ _SESSION变量?

时间:2010-01-17 02:04:33

标签: php session-variables

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

            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

3 个答案:

答案 0 :(得分: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服务器)。

答案 1 :(得分:2)

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

另外,你有register_globals吗?

答案 2 :(得分:1)

register_globals默认情况下应该关闭。

在任何地方都有session_register的电话吗?