我在php-mysql中遇到了一个多级用户登录问题。我已经有一个代码,但用户仍然可以访问管理网站,我的代码有什么问题?不过,我还是有一个问题与管理和用户帐户会话。谢谢!这是我的密码。
require('db.php');
session_start();
if (isset($_POST['username'])){
$account = stripslashes($_REQUEST['account']);
$account = mysqli_real_escape_string($con,$account);
$username = stripslashes($_REQUEST['username']); // removes backslashes
$username = mysqli_real_escape_string($con,$username); //escapes special
characters in a string
$password = stripslashes($_REQUEST['password']);
$password = mysqli_real_escape_string($con,$password);
//Checking is user existing in the database or not
$query = "SELECT * FROM users_detail WHERE account = '$account',username=
'$username' and password= '$password' ";
$result = mysqli_query($con,$query);
$rows = mysqli_num_rows($result);
if($account == "admin" && $rows['username'] = $username &&
$rows['password']=$password){
$_SESSION['username'] = $username;
header("Location: index.php"); // Redirect user to index.php
}
if($account == "user" && $rows['username'] = $username &&
$rows['password']=$password){
$_SESSION['username'] = $username;
header("Location: add user.php"); // Redirect user to index.php
}else{
echo " <div class='alert'>
Username/password is incorrect. Click <a href = 'login.php'>here</a> to log-in.
</div> ";
}
}else{
?>`
5条答案
按热度按时间acruukt91#
您所说的是rbac(角色库访问控制)。
在需要管理员访问的页面上,您可能应该将用户重定向到主页或发送未经授权的访问消息。
此外,如果你正在寻找更多的控制的基础上的作用,我会建议你使用一个库,如http://phprbac.net/
doinxwow2#
似乎您正在尝试在您的网站上实现基于角色的访问控制。
下面是使用准备好的语句的可能实现:
rlcwz9us3#
mysqli_num_rows($result)
返回行数。那以后呢$result = mysqli_query($con,$query);
您需要使用mysqli_fetch_array($query)
eivnm1vs4#
这是完整的解决方案,
1.在用户表中,需要为表中的每个用户创建列调用user\u角色admin或normal\u user
2在您的log.php中,首先获取数据库获取用户角色值,当您验证用户密码和db密码时,另存为session。
3.普通用户不小心访问了管理员页面怎么办?我们已经考虑到这一点,并做了一些额外的工作,把下面的代码放在页面\u admin\u will\u view.php头中
我希望这能帮助你,我正在使用它,它可能不是一个完美的解决方案。但对我来说很管用。哈哈
mm5n2pyu5#
首先,创建管理员角色,就像用户登录时在会话中保存管理员角色时对$account所做的那样,
在管理站点中,比如admin.php,你不想让普通用户看到的页面写这个{完美地写在header.php}