登录后页面跳转Session未保留问题求助(附代码)
解决Session跳转后无法保留/读取的问题
嘿,我仔细看了你的代码,问题主要出在Landing page.php里的几个关键错误,导致你没法正确读取登录时存在Session里的邮箱,甚至连数据库连接都没建立起来。咱们一步步来修复:
核心错误分析
错误覆盖Session值
你在Landing page.php里写了$_SESSION['email'] = $email;,但这里的$email是未定义的变量!这直接把你在submit.php里好不容易存到Session里的邮箱给清空了,自然拿不到用户信息。你应该做的是读取Session里的邮箱,而不是重新赋值。缺少数据库连接
页面里用到了$connection变量,但没有引入connect.php文件,导致数据库连接不存在,查询肯定会失败。未检查Session有效性
如果用户直接访问Landing page.php而不经过登录流程,Session里根本没有email值,直接查询会导致错误。SQL注入风险
直接把$email拼进SQL语句里,存在安全隐患,最好用参数化查询来避免。
修正后的Landing page.php代码
<?php // 必须在所有输出之前启动Session session_start(); // 先检查Session中的用户邮箱是否存在,防止未登录访问 if (!isset($_SESSION['email'])) { header("Location: customerportal.php?login=unauthorized"); exit(); } // 从Session中读取用户邮箱 $email = $_SESSION['email']; // 引入数据库连接文件 require_once('connect.php'); // 使用参数化查询避免SQL注入,同时提高安全性 $sql = "SELECT username FROM users WHERE EMAIL = ?"; $stmt = mysqli_prepare($connection, $sql); // 绑定参数,"s"表示字符串类型 mysqli_stmt_bind_param($stmt, "s", $email); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); // 查询结果处理 if ($row = mysqli_fetch_assoc($result)) { echo $row['username']; } else { echo "No User."; } ?>
额外注意事项
- 确保所有需要用到Session的页面,都在任何输出(包括空格、HTML标签)之前调用
session_start();,否则会触发"headers already sent"的错误。 - 可以临时加调试代码排查问题:比如在
submit.php跳转前加var_dump($_SESSION);,在Landing page.php开头加var_dump($_SESSION);,看看Session的值是否正常传递。 - 检查PHP配置中的
session.cookie_domain和session.cookie_path,确保Session Cookie能在你的站点路径下正常生效。
内容的提问来源于stack exchange,提问作者Ashley Nesh
相关产品推荐
相关产品推荐

