会话管理:在标题中显示用户名的问题

时间:2010-05-03 13:04:10

标签: php mysql session login

我正在为我的网站开发一个简单的登录和注销模块,没有任何安全性。我在Windows XP机器上使用wamp。当用户提交登录信息时,我正在创建会话,它会重定向到process.php文件,该文件创建会话变量并启动会话。现在,如果登录成功,用户将被重定向到包含头文件的欢迎页面(显示涉及登录注销帮助选项的标题)问题是当用户成功登录时,标题不会将登录链接更改为注销。以下代码来自process.php,它启动登录。

$username = $_POST['username'];
        $password = $_POST['password'];

        //echo "{$username}:{$password}";
        $connection = mysql_connect("localhost","root","");
        if(!$connection)
        {
            die("Database Connection Failed".mysql_error());
        }
        $db_select = mysql_select_db("tester",$connection);
        if(!$db_select)
        {
            die("Database Selection Failed".mysql_error());
        }
        $result = mysql_query("SELECT * FROM user",$connection);
        if(!$result)
        {
            die("Database Selection Failed".mysql_error());
        }


        $q = "SELECT * FROM user " ."WHERE Name='".$username."' AND Password='".$password. "' ";
         // Run query
         $r = mysql_query($q);

         if ( $obj = @mysql_fetch_object($r) )
        {
            session_start();
            // Login good, create session variables
            $_SESSION["valid_id"] = session_id();
            $_SESSION["valid_user"] = $_POST["username"];
            $_SESSION["valid_time"] = time();

            Header('Location: welcome.php');

以下代码来自header.php,它包含在welcome.php

             

    </div>

    <div id = "userdetail">

        <?php

        if(isset($_SESSION["valid_user"]))
        {
            echo($_SESSION["valid_user"]." " ); 
             echo("<a href=logout.php>Logout</a>"); 

        }
        else
        {
            echo("<a href = login.php>Sign In</a>");
        }

        ?>

              | Help |  Search      

            <input type = "text" name = "searchbox" value = "" />
    </div>
</div>

1 个答案:

答案 0 :(得分:0)

每次调用每个页面时都必须调用start_session()。 这应始终是您在页面中进行的第一次通话。

登出时调用session_destroy。

另外你应该清除$ _SESSION变量

$_SESSION = array();

编码提示: 使用模板引擎(例如smarty)分离显示php代码中的内容 您的代码包含sql注入错误,请参阅我对您帖子的评论。

你也应该使用散列密码,不要忘记盐。 不要将普通密码存储到您的数据库中。

SQL injection