使用PHP登录系统

时间:2011-07-17 09:37:55

标签: php authentication

我是PHP的新手。作为一个新手,我开始了我的第一个项目。我为我的webapp创建了一个登录系统。但是有一个问题。当我尝试访问索引或主页时,它会要求登录,但是当我尝试访问其他页面时,它不会要求我登录。

如何为所有页面管理相同的限制? 我的登录代码在这里。

<?
$connection=mysql_connect("localhost","admin","");
if(!$connection)
{
    die("Database Connection Failed: " . mysql_error());
}
//Select a database to use
$db=mysql_select_db('vss',$connection);
if(!$db)
{
    die("Database Selection Failed: " . mysql_error());
}
$username=$_POST['username'];
$password=$_POST['password'];
//
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
//
$query="SELECT *FROM user where username='$username'AND password='$password'";
$result=mysql_query($query);
$count=mysql_num_rows($result);
// If result matched $username and $password,table row must be 1 row
if($count==1){
// Register $username, $password and redirect to file "example.php"
session_register("username");
session_register("password");
header("location:http://localhost/vss/main.php");
}
else {
echo "Wrong Username or Password";
}
?>

我刚刚在$userok=$count;行之后添加了$count==1然后我添加了我刚刚添加:$ userok = $ count;行$ count == 1之后我添加了Call.php-&gt; <?php if($userok!=1); { header("location:localhost/vss/logindo.php";); } ?>我在限制页面的顶部添加了include(call.php)。但是,每次请求登录时我都会点击按钮。如何按“登出”直到登录用户为止。我在限制页面的顶部添加了include(call.php)。但是,当我每次请求登录时单击该按钮。如何按下“注销”直到登录用户。

3 个答案:

答案 0 :(得分:1)

自从你学习以来,我不会讨论这个问题的安全性。你能做的是以下几点: 1)在if($count==1)行下方添加$userok=1;之类的内容    并在else部分添加$userok=0; 2)将上面的.php重命名为init.php, 3)在所有其他页面的顶部做类似“

   include ('init.php');
   if (!($userok==1)) { 
      echo "Please do not call this directly, login first";
      exit;
   }

您可以使用header("Location: http://...")重定向到您的登录页面来替换回音“请登录”。

答案 1 :(得分:0)

请注意marto的重要词汇 请确保您的sql是安全的 我看到你已经在使用mysql_real_escape_string也看看预备语句

自PHP 5.3.0起,sesssion寄存器也已弃用。只使用$ _SESSSION [“用户名”] 并且没有必要在会话中输入密码

在会话中获得值后,您可以在每个页面的顶部检查它们(使用包含此内容)虽然我建议不要在会话中使用任何特定数据,但只考虑设置像logged_in这样的会话var

e.g。

if(empty($_SESSION["username"])
{
  //redirect to login
}
else
{

}

答案 2 :(得分:0)

如果设置了用户名会话,则典型的方法是检查所有页面。例如,您可以使用front controller pattern轻松实现它。如果不是,则将用户重定向到登录页面。

此外,我发现您没有哈希用户密码。这不是非常安全的方法。你应该看看how to deal with passwords in PHP。此外,注册密码会话是非常无用的,可能不安全。

正如@marto在评论中提到的那样,您应该了解脚本中的SQL注入可能性。 prevent it并不难。