PHP会话变量管理员权限校验问题求助
嘿,完全不用不好意思,刚接触PHP的时候这类权限校验的问题太常见啦!我来帮你搞定这个需求,分两步走就好:
第一步:完善登录脚本,把管理员状态存入Session
你的Login.php在验证用户名密码成功后,需要从数据库里取出用户的isadmin字段值,并存到Session中,这样后续页面才能读取这个状态。举个完整点的代码片段参考:
<?php session_start(); // 假设你已经完成了数据库连接和用户名密码验证 $un = $_POST["username"]; $pw = $_POST["password"]; $conn = new PDO("mysql:host=localhost;dbname=你的数据库名", "用户名", "密码"); // 准备查询,防止SQL注入 $stmt = $conn->prepare("SELECT id, username, isadmin FROM users WHERE username = :un AND password = :pw"); $stmt->bindParam(':un', $un); $stmt->bindParam(':pw', $pw); // 注意:实际项目里密码要存哈希值,不要明文比对! $stmt->execute(); $user = $stmt->fetch(PDO::FETCH_ASSOC); if ($user) { // 登录成功,把用户信息存入Session $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['is_admin'] = $user['isadmin']; // 这行是关键,存管理员状态 // 登录成功后可以跳转到后台或者addproduct.php header("Location: addproduct.php"); exit(); } else { // 登录失败,跳回登录页或提示错误 header("Location: login.php?error=1"); exit(); }
👉 注意:实际项目里绝对不要明文存储/比对密码,要用password_hash()和password_verify()来处理密码,这里只是为了贴合你的代码示例。
第二步:在addproduct.php顶部添加管理员校验逻辑
现在在addproduct.php的最开头(任何HTML输出之前)加上这段校验代码,判断用户是否是管理员登录:
<?php session_start(); // 必须放在最顶部,任何输出之前 // 校验逻辑:如果Session里没有管理员标识,或者不是管理员,就跳转到登录页 if (!isset($_SESSION['is_admin']) || $_SESSION['is_admin'] != 1) { header("Location: login.php"); exit(); // 一定要加exit,防止后续代码继续执行 } // 下面就是你原来的addproduct.php的内容啦 ?> <!-- 这里开始写你的HTML页面内容 --> <h1>添加商品</h1> <!-- 其他表单代码... -->
这样一来,只要不是管理员登录的用户访问addproduct.php,就会自动跳转到登录页;管理员登录后就能正常看到页面内容啦。
如果还有其他小问题,随时问哦!
内容的提问来源于stack exchange,提问作者AdamElsbury




