PHP登录脚本中Session未设置错误求助
问题诊断与修复方案
嘿,兄弟,你的问题根源太明显了——你在登录成功后完全没有给$_SESSION['email']赋值!看你login.php里的这段代码:
if($nr==1){ $_SESSION['email']; // 这里只是引用变量,没有任何赋值操作! header('Location:menu.php'); }
这行$_SESSION['email'];啥也不会做,它只是读取这个Session变量(但此时它还不存在),根本没把用户的邮箱存进去,所以跳转到menu.php后自然会显示“not set”。
第一步:修复Session赋值问题
你需要先从数据库查询结果中取出用户的邮箱,然后赋值给Session变量。修改login.php的登录成功分支:
if($nr==1){ // 从查询结果中取出用户数据 $user = mysqli_fetch_assoc($rezultat); // 把用户邮箱存入Session $_SESSION['email'] = $user['email']; header('Location:menu.php'); exit; // 跳转后一定要加exit,避免后续代码意外执行 }
第二步:顺便修复SQL注入风险(非常重要)
你现在直接把POST的$email和$pass拼进SQL语句里,这是严重的SQL注入漏洞!必须改用预处理语句来避免这个问题,修改后的数据库查询部分应该是这样:
if(isset($_POST['log'])){ include "database.php"; $email = $_POST['email']; $pass = $_POST['pas']; // 使用预处理语句防注入 $query = "SELECT * from users WHERE email=? AND pass=?"; $stmt = mysqli_prepare($db, $query); mysqli_stmt_bind_param($stmt, "ss", $email, $pass); mysqli_stmt_execute($stmt); $rezultat = mysqli_stmt_get_result($stmt); if(!$rezultat){ echo "Failed"; } $nr = mysqli_num_rows($rezultat); if($nr==1){ $user = mysqli_fetch_assoc($rezultat); $_SESSION['email'] = $user['email']; header('Location:menu.php'); exit; } else { echo "invalid"; } }
额外提醒(必看)
- 密码存储:你现在直接存明文密码是极度不安全的,应该用
password_hash()加密后存储,登录时用password_verify()验证。 session_start():确保在所有输出之前调用,你的代码里这部分是对的,保持住。
这样修改后,登录成功后Session里就会有用户邮箱,menu.php就能正常显示了。
内容的提问来源于stack exchange,提问作者Genalb Bajrami
相关产品推荐
相关产品推荐

