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

PHP中嵌套isset或Session功能失效,CMS前台文章页不显示编辑入口问题排查

问题排查解决步骤
    1. 所有使用Session的页面顶部必须加session_start()
      所有涉及$_SESSION读写的页面(包括Login.php、导航栏所属的文章详情页、后台页面)都需要在代码最顶部、任何输出之前写入session_start(),否则PHP无法读取到已存储的Session值,同时注意session_start()前不能有空格、HTML代码、UTF-8 BOM头等任何输出内容。
    1. 修复Login.php的登录判断逻辑漏洞
      你当前的登录判断逻辑存在明显错误:原判断的第一个条件if($username !== $db_username && $password !== $db_user_password)是只有用户名和密码同时都错误的时候才会跳转,只要其中一项正确就不会进入该分支,也不会进入后续设置Session的分支,导致Session没有正确写入。需要修改为:
// 把逻辑与&&改为逻辑或||,只要用户名或密码任意一项错误就跳转
if($username !== $db_username || $password !== $db_user_password) {
    header("Location: ../index.php");
    // 跳转后必须加exit终止后续代码执行
    exit;
} else {
    // 账号密码验证通过后设置Session
    $_SESSION['username'] = $db_username;
    $_SESSION['firstname'] = $db_user_firstname;
    $_SESSION['lastname'] = $db_user_lastname;
    $_SESSION['user_role'] = $db_user_role;
    header("Location: ../admin");
    exit;
}
    1. 补全管理员角色判断
      你当前只判断了user_role是否存在,没有校验是不是管理员身份,普通用户登录后也会显示编辑链接,建议修改导航栏判断逻辑:
// 请根据你的实际管理员角色值调整判断条件,比如你的管理员角色值是admin就写=== 'admin'
if(isset($_SESSION['user_role']) && $_SESSION['user_role'] === 'admin') {
    if(isset($_GET['p_id'])) {
        $the_post_id = $_GET['p_id'];
        echo "<li><a href='admin/post.php?source=edit_post&p_id={$the_post_id}'>Edit Post</a></li>";
    }
}
    1. 调试验证参数是否正常传递
      如果以上修改后仍不生效,可以临时在导航栏代码前加两行调试代码,确认参数是否正常读取:
// 调试用,上线后删除
var_dump($_SESSION);
var_dump($_GET);

如果输出中没有user_role字段说明Session没有正常写入,没有p_id字段说明文章详情页没有正确传递p_id参数。

    1. 检查Cookie设置
      确认浏览器没有禁用Session对应的Cookie,PHP默认通过Cookie存储Session ID,禁用Cookie会导致Session无法跨页面传递。

内容的提问来源于stack exchange,提问作者Yusuf Raşit Özer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:06:03