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

登录成功后$_SESSION无法正常工作问题求助

问题分析与解决方案

你遇到的Undefined index: student错误,核心原因很明确——login.php中没有初始化PHP会话!PHP的$_SESSION变量必须在调用session_start()之后才能正常读写,你在login.php里直接给$_SESSION['student']赋值,但会话根本没启动,所以这个值根本没被保存下来,到dashboard.php自然就读取不到了。

下面是具体的修复步骤:

1. 给login.php添加会话初始化

在login.php的最顶部(任何输出之前)加上session_start(),确保会话能正常工作:

<?php
session_start(); // 必须放在最开头,在所有输出之前
include("config.php");

$email = mysqli_real_escape_string($con, $_POST['email']);
$password = md5($_POST['password']);
$sql = mysqli_query($con,"select student_id from student where email='".$email."' and password='".$password."' and status='1'");

if (mysqli_num_rows($sql) > 0) {
    $results = mysqli_fetch_array($sql);
    $_SESSION['student'] = $results['student_id'];
    // 原代码里的if (!isset($_POST))判断多余,直接返回重定向指令即可
    echo json_encode(array('redirect' => "dashboard.php"));
} else {
    echo json_encode(array('error' => 'Wrong email or password or may be your account not activated.'));
}
?>

2. 完善dashboard.php的会话检查

你的dashboard.php里session_start()的位置是对的,但建议把注释掉的登录检查代码放开,避免未登录用户直接访问页面:

<?php
session_start();
if(!isset($_SESSION['student'])) {
    header("location: index.php");
    exit; // 加上exit防止后续代码继续执行
}
echo $_SESSION['student'];
include('assets/db/config.php');
?>

额外注意事项

  • 确保config.php文件开头没有任何空白字符、换行或输出内容,否则会导致session_start()因"已发送头部"报错。
  • md5加密密码的安全性极低,建议改用PHP原生的password_hash()和password_verify()来处理密码验证,提升系统安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:11:27