登录成功后$_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
相关产品推荐
相关产品推荐

