PHP MVC后台逻辑问题求助:需实现登录后显示仪表盘
你的问题出在未登录时调用login()后,代码没有终止执行,后续的仪表盘加载逻辑仍然会运行,导致两个页面内容同时输出。
修复方案
- 优先处理登出操作,销毁session后立即触发页面跳转,避免后续逻辑混乱
- 未登录时调用
login()后,必须终止后续代码执行,彻底阻断仪表盘内容的加载 - 所有需要权限的页面路由逻辑,必须放在登录验证通过之后执行
修改后的代码:
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
相关产品推荐
相关产品推荐

