PHP登录表单登录成功后无法跳转至home.php页面求助
问题诊断与修复方案
嘿,我帮你找出了几个导致登录成功后无法正常显示home.php页面的关键问题,咱们一步步来修复:
1. 登录成功时Session变量赋值错误
在login.php里,当验证通过后你想把用户名存入Session,但你写的$_SESSION['username'] = $login_user;里的$login_user根本没定义啊!应该从查询返回的$row数组里取正确的用户名才对:
错误代码片段:
if(mysqli_num_rows($result) == 1) { $_SESSION['username'] = $login_user; // Initializing Session header("location: home.php"); // Redirecting To Other Page }
修正后:
if(mysqli_num_rows($result) == 1) { $_SESSION['username'] = $row['username']; // 从查询结果里拿真实的用户名 header("location: home.php"); exit; // 这里还要加个终止,后面说原因 }
2. 跳转后没终止脚本执行
用header()跳转之后,PHP脚本不会自动停止运行,如果后面还有代码(哪怕是空的),偶尔会因为输出缓冲的问题导致跳转失效,所以一定要在header()后面加上exit;或者die();,确保脚本立刻终止,浏览器能正确跳转。
3. Check.php里的Session启动顺序错了
在check.php里,你先include了数据库连接文件,再启动Session,但session_start()必须在任何输出之前执行——如果connection.php里不小心有空格、换行或者echo输出,就会导致Session启动失败,进而home.php里拿不到用户信息。所以得把session_start();移到最顶部:
修正后的check.php开头:
<?php session_start(); // 先启动Session,再做其他操作 include('connection.php'); $user_check=$_SESSION['username']; // ... 剩下的代码不变
额外的安全提醒(非常重要!)
顺便提一句,你现在的代码有两个严重的安全漏洞:
- SQL注入风险:直接把用户输入的用户名和密码拼进SQL语句,攻击者可以轻易篡改查询逻辑,窃取或破坏数据库数据;
- 明文存储密码:直接存用户密码的明文,一旦数据库泄露,所有用户的账号都会直接被盗。
赶紧改成用password_hash()存密码,用password_verify()验证密码,再配合预处理语句防注入,给你个示例参考:
login.php里的查询部分可以改成这样:
// 替换原来的SQL查询 $stmt = $db->prepare("SELECT * FROM users WHERE username=?"); $stmt->bind_param("s", $username); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); // 验证密码(前提是你存的是哈希后的密码) if($result->num_rows == 1 && password_verify($password, $row['password'])) { $_SESSION['username'] = $row['username']; header("location: home.php"); exit; } else { $error = "Incorrect username or password."; }
把这些修正都加上之后,登录成功应该就能正常跳转到home.php,显示欢迎信息了。
内容的提问来源于stack exchange,提问作者BRond
相关产品推荐
相关产品推荐

