You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动