我有一个用 PHP 和 MySQL 设置的网站用户登录系统。我的问题是我是否可以修改我现在拥有的,以创建一个“权限”系统。换句话说,只为用户显示某些控件,为管理员显示不同的控件。在我的 mysql 表中,我有列 'id'
、'username'
、'password'
和一个带有 'a' 的 ENUM 'permissions' ,'b'。 'a' 是默认值(不是管理员)。下面我将向您展示我的尝试。
这个文件是“checklogin.php
”(为了节省空间,我不会添加所有代码)
//First I include variables to connect to the database & connect
//Then I define username and password as $_POST from a form on an earlier page
$user=a;
$admin=b;
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword' and permissions='$user'";
$sqladmin="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword' and permissions='$admin'";
$result=mysql_query($sql);
$resultadmin=mysql_query($sqladmin);
$count=mysql_num_rows($result);
$countadmin=mysql_num_rows($resultadmin);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
session_register("user");
header("location:login_success.php");
}
else {
if($countadmin==1){
session_register("myusername");
session_register("mypassword");
session_register("admin");
header("location:login_success.php");
}
else {
if($count==0) {
if($countadmin==0) {
echo "Wrong Username or Password";
}
}
}
}
所以在这个文件中,我正在检查表中有多少行与用户输入匹配,以及它是否是管理员,如果有,那么我将使用用户名、密码和权限注册一个 session 。
接下来,我有文件“login_success.php
”
<?php
session_start();
if(!session_is_registered(myusername)){
header("location:main_login.php");
}
else {
}
?>
<html>
<body>
Login Successful
<?php
if(session_is_registered(admin)){
echo "Welcome Admin!";
}
else {
echo "Not admin...";
}
?>
上面的代码只是检查 session 是否已注册,如果没有,则返回登录表单。下面是一段代码,用于检查用户是否是管理员。 这个作品的登录部分我无法计算出权限。
最后,我想我的问题是为什么这不起作用?从逻辑上看似乎是正确的。很抱歉这篇文章很长。感谢您的帮助。
最佳答案
首先,您使用的是已弃用的 session_register,session_is_registered
。 Php 手册推荐使用$_SESSION
。 session_is_registered
需要字符串,但您没有传递字符串 - 它应该类似于 session_is_registered("admin")
,而不是 session_is_registered(admin)
此外,我认为您可以改进整个例程:
- 从数据库中读取
SELECT * FROM $tbl_name WHERE username='$myusername'
(假设 $myusername 正确转义); - 如果记录不存在,则用户名无效
- 检查密码(或从安全角度来看更好的哈希值)是否与存储的值匹配。如果不是,您可能需要增加“failed_login_attempts”字段
- 然后检查权限。我猜客户可能有不止 1 个角色。
关于PHP & MySQL 用户登录和权限系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13778521/