首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于PHP的登录系统

问基于PHP的登录系统
EN

Stack Overflow用户
提问于 2011-07-17 17:37:55
回答 3查看 761关注 0票数 0

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

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

代码语言:javascript
复制
<?
$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然后我添加我只是注销行$count==1然后我添加Call.php-><?php if($userok!=1); { header("location:localhost/vss/logindo.php";); } ?>我添加include(call.php)在顶部的限制pages.But,当我点击按钮,每次它要求login.How我可以使登录用户,直到他按下“注销”。我在restricted pages.But的顶部添加了include(call.php),当我每次点击按钮询问注销时,我可以让登录的用户直到他按下“login.How”。

EN

回答 3

Stack Overflow用户

发布于 2011-07-17 17:48:00

因为你正在学习,所以我不会讨论它的安全性。您可以执行以下操作: 1)在if($count==1)行下面添加类似$userok=1;的内容,在else部分添加$userok=0; 2)将上面的.php重命名为类似init.php的内容,3)在所有其他页面的顶部执行类似“

代码语言:javascript
复制
   include ('init.php');
   if (!($userok==1)) { 
      echo "Please do not call this directly, login first";
      exit;
   }

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

票数 1
EN

Stack Overflow用户

发布于 2011-07-17 17:50:21

请注意marto的重要语句,请确保您的sql是安全的,我看到您已经在使用mysql_real_escape_string了,还请注意预准备语句。

此外,自PHP 5.3.0起,不推荐使用会话寄存器。只需使用$_SESSSION"username“,实际上不需要在会话中输入密码

一旦你有了会话中的值,你就可以在每个页面的顶部检查它们(使用include ),尽管我建议不要在会话中使用任何特定的数据,只需考虑将诸如logged_in之类的内容设置为会话变量

例如:

代码语言:javascript
复制
if(empty($_SESSION["username"])
{
  //redirect to login
}
else
{

}
票数 0
EN

Stack Overflow用户

发布于 2011-07-17 17:52:15

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

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

正如@marto在评论中提到的,您应该意识到脚本中SQL注入的可能性。使用prevent it并不难。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6723004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档