登录重定向与校验失效求助:无法跳转至index1.php页面
解决登录表单跳转与check_login验证问题
嘿,我来帮你搞定这个登录跳转和验证的问题!首先咱们先把你的login.function.php代码补全修正,确保登录成功后能跳转到index1.php,然后再讲index1.php里的check_login代码该怎么加。
第一步:修正login.function.php的登录逻辑
你的代码应该是没写完验证后的跳转逻辑,而且跳转后必须终止脚本执行,否则页面会停留在当前文件。完整的修正代码如下:
<?php session_start(); function login($username, $password) { // 预设的正确用户名和密码 $correct_user = "xx1"; $correct_pass = "xx2"; // 验证用户名和密码是否匹配 if ($username === $correct_user && $password === $correct_pass) { // 登录成功,给会话添加登录标记 $_SESSION['logged_in'] = true; $_SESSION['username'] = $username; // 跳转到index1.php header("Location: index1.php"); exit; // 非常重要!跳转后必须终止脚本,否则会继续执行后续代码 } else { // 登录失败,返回错误提示 return "用户名或密码错误,请重试"; } } // 处理登录表单的POST请求(如果这个文件是接收表单提交的入口) if ($_SERVER['REQUEST_METHOD'] === 'POST') { $username = trim($_POST['username'] ?? ''); $password = trim($_POST['password'] ?? ''); $login_error = login($username, $password); }
第二步:在index1.php中添加check_login验证
check_login的作用是确保只有登录成功的用户才能访问index1.php,必须把这段代码放在index1.php的最顶部(任何HTML输出之前),否则会因为输出了内容导致header跳转失败。
完整的index1.php示例代码:
<?php session_start(); // 定义check_login验证函数 function check_login() { // 检查会话中是否存在有效的登录标记 if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { // 未登录的话直接跳回登录页面(换成你的登录表单页面路径,比如login.php) header("Location: login.php"); exit; } } // 调用验证函数,放在页面最开头,先验证再显示内容 check_login(); ?> <!-- 下面是你的index1.php的页面内容 --> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>登录成功首页</title> </head> <body> <h1>欢迎回来,<?php echo htmlspecialchars($_SESSION['username']); ?>!</h1> <!-- 这里放你的首页内容 --> </body> </html>
关键注意点
- 所有用到会话的页面(登录页、处理页、首页)都必须在最开头调用
session_start();,而且不能有任何输出(比如空格、HTML标签)在它之前。 - 跳转后的
exit;一定要加,否则脚本会继续执行,导致页面停留在login.function.php。 - 用
htmlspecialchars()输出用户名是为了防止XSS攻击,是个好习惯。
内容的提问来源于stack exchange,提问作者Magic Woman
相关产品推荐
相关产品推荐

