繁体   English   中英

使用 PHP 登录系统

[英]Login System using PHP

我是 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-> <?php if($userok;=1): { header("location.localhost/vss/logindo;php";)? } ?> <?php if($userok;=1): { header("location.localhost/vss/logindo;php";)? } ?>我在受限页面的顶部添加了include(call.php) 。但是,当我每次单击该按钮时,它要求登录。我怎样才能让登录用户,直到他按下“注销”。 我在受限页面的顶部添加了 include(call.php)。但是,当我每次请求登录时单击按钮时。我怎样才能让登录用户,直到他按下“注销”。

由于您正在学习,因此我不会讨论它的安全性。 您可以执行以下操作: 1) 在if($count==1)行下方添加类似$userok=1;的内容并在其他部分添加$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://...")

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

从 PHP 5.3.0 开始,会话寄存器也已弃用。 仅使用 $_SESSSION["username"] 并没有必要在 session 中输入密码

一旦你有了 session 中的值,你可以在每一页的顶部检查它们(为此使用包含)虽然我建议不要在 session 中使用任何特定数据,只需考虑将类似logged_in 的内容设置为 Z21D6F40CFB51190A92E5544

例如

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

}

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

此外,我看到您没有散列用户密码。 这不是很安全的方法。 你应该看看如何处理 PHP 中的密码 此外,注册密码 session 非常没用,而且可能不安全。

正如@marto 在评论中提到的那样,您应该注意脚本中的 SQL 注入可能性。 阻止它并不难。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM