2010-05-03 86 views
0

我正在为我的网站设计一个简单的登录和注销模块,但没有任何安全性。我在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'); 

下面的代码是包含在的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> 
+0

你的示例代码包含SQL注入错误。 $ q =“SELECT * FROM user”。“WHERE Name ='”。$ username。“'AND Password ='”。$ password。 “'”; 您必须转义参数名称和密码! – 2010-05-03 13:08:42

回答

0

你必须调用start_session()每一次每一个所谓的页面上的header.php。 这应该始终是您在页面中执行的第一个呼叫。

退出时调用session_destroy。

另外,你应该清楚$ _SESSION变量

$_SESSION = array(); 

的编码提示: 分割你的模板引擎就像smarty 您的代码显示来自PHP代码的东西包含SQL注入漏洞,看到我对你的帖子的评论。

你也应该使用哈希密码,不要忘记盐。 不会将简单密码存储到您的数据库中。

SQL injection

+0

谢谢Bernd。我不知道我必须在涉及会话的每个文件上放置session_start()。问题已解决。 – aeonsleo 2010-05-03 13:20:28

+0

,但也修复sql-inqjection或任何人都可以登录,即使不知道任何用户/密码。 – 2010-05-03 13:22:27

+0

我还没有完全理解sql注入,但是在编写进一步的登录代码之前,一定会抽时间理解它。感谢所有的帮助。 – aeonsleo 2010-05-03 14:45:49