You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅允许admin用户访问panel.php中的coworkersmain.php链接?

正确实现方案

要实现仅admin用户可访问coworkersmain.php,需要从页面显示控制和直接访问拦截两个层面处理,避免出现权限绕过的问题:

1. 修正panel.php:仅admin显示链接,修复session启动位置

原代码中session_start()放在HTML输出之后会触发错误(session必须在任何输出前启动),同时要判断用户身份后再渲染链接:

<?php session_start(); ?>
<!DOCTYPE html>
<!-- opens after logging in -->
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Panel</title>
</head>
<body>
    <h1>Welcome to the Panel</h1>
    <p>You are <?php echo $_SESSION['username']; ?>.</p>  
    
    <?php 
    // 仅当登录用户是admin时,显示链接
    if ($_SESSION['username'] === 'admin') {
        echo '<a href="./coworkersmain.php">Co-workers</a>';
    }
    ?>

    <form method="post" action="./logout.php">
        <input type="submit" value="Logout" name="logout" class="logout-button"/>
    </form>    
</body>
</html>

2. 在coworkersmain.php添加核心权限验证

如果有人直接输入coworkersmain.php的URL,页面显示控制就会失效,因此必须在目标页面本身添加验证逻辑:

在coworkersmain.php的最顶部插入以下代码:

<?php
session_start();
// 验证用户是否登录且为admin
if (!isset($_SESSION['username']) || $_SESSION['username'] !== 'admin') {
    // 非admin用户直接跳转回panel页面
    header("Location: panel.php");
    exit();
}
?>
<!-- 此处放置coworkersmain.php原本的HTML内容 -->

3. 原checkadmin.php的优化(可选)

如果仍想通过中间页跳转验证,可修改panel.php的链接指向checkadmin.php,同时修正checkadmin.php的输出问题(echo内容会导致header跳转失效):

修改panel.php的链接部分:

<?php 
if ($_SESSION['username'] === 'admin') {
    echo '<a href="./checkadmin.php">Co-workers</a>';
}
?>

修正checkadmin.php:

<?php
session_start();

// 先检查session是否存在username,避免未登录时报错
if (!isset($_SESSION['username']) || $_SESSION['username'] !== 'admin') {
    header("Location: panel.php");
    exit();
} 

header("Location: coworkersmain.php");
exit();
?>

关键提醒:无论是否使用中间跳转页,coworkersmain.php本身的权限验证都不能省略,这是防止直接访问的核心安全保障。

内容的提问来源于stack exchange,提问作者Luka Bitsadze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:40:02