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

PHP会话验证异常:登录后仍被拦截权限页面

PHP Session权限控制失效问题排查与修复

核心问题分析

  • Session启动逻辑错误:if(!isset($_SESSION))的判断不严谨,PHP未启动session时$_SESSION变量本身不存在,该判断无法可靠触发session_start(),应直接在页面顶部无条件启动session。
  • Login页面Session初始化滞后:原代码仅在登录成功后才启动session,若前置文件未提前初始化session,会导致会话数据无法正确写入。
  • 跳转未终止脚本:header()跳转后未执行exit()/die(),脚本可能继续运行,导致session数据未完成保存就跳转页面。

修复代码与步骤

1. 修正protect.php

将session启动逻辑改为无条件调用,确保权限校验前session已初始化:

<?php
session_start();

if(!isset($_SESSION['id'])){
    die("<h1>You don't have permission to see this!</h1>");
}      
?>

2. 修正login.php

把session_start()移到页面最顶部,并且在跳转后终止脚本执行:

<?php
session_start();
include("conecao.php");

if(isset($_POST['email']) || isset($_POST['senha'])){
    if(strlen($_POST['email']) == 0){
        echo "Please enter your email!";
    } elseif(strlen($_POST['senha']) == 0){
        echo "Please enter your password!";
    } else {
        $email = $mysqli->real_escape_string($_POST['email']);
        $senha = $mysqli->real_escape_string($_POST['senha']);

        $sql_code = "SELECT * FROM usuarios WHERE email = '$email' AND senha = '$senha'";
        $sql_query = $mysqli->query($sql_code) or die("SQL query failed!");
        
        $quantidade = $sql_query->num_rows;

        if($quantidade == 1) {
            $usuario = $sql_query->fetch_assoc();

            $_SESSION['id'] = $usuario['id'];
            $_SESSION['nome'] = $usuario['nome'];

            header("Location: painel.php");
            exit(); // 终止脚本,确保session数据写入完成
        } else {
            echo "Incorrect email or password!";
        }
    }
}
?>

3. 额外排查要点

  • 检查conecao.php及所有PHP文件,确保<?php标签前无任何空白字符、HTML输出,否则会导致session_start()无法设置cookie(header已发送)。
  • 通过phpinfo()查看session配置,确认session.cookie_path设置为/,保证session cookie在整个站点内有效。
  • 清除浏览器缓存与cookie后重新测试登录流程。

内容的提问来源于stack exchange,提问作者João Henrique Esper Leite

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:45:40