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

PHP MVC后台逻辑问题求助:需实现登录后显示仪表盘

你的问题出在未登录时调用login()后,代码没有终止执行,后续的仪表盘加载逻辑仍然会运行,导致两个页面内容同时输出。

修复方案

  1. 优先处理登出操作,销毁session后立即触发页面跳转,避免后续逻辑混乱
  2. 未登录时调用login()后,必须终止后续代码执行,彻底阻断仪表盘内容的加载
  3. 所有需要权限的页面路由逻辑,必须放在登录验证通过之后执行

修改后的代码:

session_start();

require_once('controllers/dashboard.php');
require_once('controllers/admin.php');
require_once('controllers/login.php');

try {
    // 先处理登出操作
    if (isset($_GET['action']) && $_GET['action'] == "signout") {
        session_destroy();
        // 登出后跳回当前页,触发登录判断
        header("Location: " . $_SERVER['PHP_SELF']);
        exit();
    }

    // 未登录时展示登录页,直接终止后续代码
    if (!isset($_SESSION['username'])) {
        login();
        exit(); // 核心改动:停止执行后面的仪表盘相关逻辑
    }

    // 仅登录用户能访问的页面路由
    if (isset($_GET['page']) && $_GET['page'] != NULL) {
        $page = strval($_GET['page']);

        if ($page == "dashboard") {
            dashboard();
        } elseif ($page == "admin") {
            admin();
        }
    } else {
        require_once('templates/dashboard.php');
    }
} catch (Exception $e) {
    $errorMessage = $e->getMessage();
    require('templates/error.php');
}

关键改动说明

  • 登出逻辑前置:销毁session后立即跳转并终止代码,防止后续逻辑错误执行
  • 添加exit():确保未登录状态下,登录页输出后不会再加载仪表盘内容
  • 路由逻辑后置:所有需要权限的页面,只有登录验证通过后才会被处理

额外提醒:如果你的login()函数包含表单验证逻辑(比如验证通过后设置session),也要在验证成功后添加跳转+终止代码的逻辑,避免重复输出内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:02:50