【发布时间】:2019-01-30 12:42:48
【问题描述】:
我刚刚尝试为我的登录页面使用会话,我还想存储“权限”以启用或禁用对某些页面的访问。存储“用户”有效,但不存储“权限”。
更新:开始工作了。干杯!
表:
CREATEDATABASE`account`
CREATETABLE`profile`
id INT(3) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user VARCHAR(20) NOT NULL,
pass VARCHAR(20) NOT NULL,
rights VARCHAR(10) NOT NULL,
登录页面/会话:
<?php
session_start();
$user = $_POST['user'];
$pass = $_POST['pass'];
$conn = mysqli_connect("localhost", "root", "", "account");
$query = mysqli_query($conn, "SELECT * FROM account.profile WHERE user = '$user', pass = '$pass' ")
or die("Failed to connect DB".mysqli_error());
$rows = mysqli_num_rows($query);
$right=$rows['right'];
if ($rows == 1 ){
$_SESSION['user']=$user;
header("Location: main.php");
}
else
{
echo "<script>
alert('Username and Password not found!');
window.location.href='logout.php';
</script>";
}
?>
每一页的开头都是:
<?php
session_start();
error_reporting(0);
$user=$_SESSION['user'];
$right=$_SESSION['right'];
if($user==true){
?>
希望有人能指引我走向正确的道路。谢谢!
【问题讨论】:
-
$_SESSION['right']=$right$right 从未定义 -
$rights = $_POST['rights']; ... $_SESSION['right']=$right;是的,你这里有一个错字。 -
你好@IdontDownVote 和@Havenard - 应该是
session_start(); $rights = $_POST['rights'];.....$user=$_SESSION['user']; $right=$_SESSION['right'];吗? -
您很容易受到该代码的 SQL 注入攻击,您应该使用准备好的语句。用户密码也应该NEVER以纯文本形式存储。他们应该总是被散列
-
您不想在登录时将内容放入会话中,而不是将它们拉出吗?