You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

登录后无法跳转至index.php,页面仅刷新问题求助(附代码)

解决登录后无法跳转至index.php的问题

核心问题及修复方案

1. 未初始化会话(SESSION)

$_SESSION变量的使用必须先通过session_start()初始化,登录页和首页都需要在代码最顶部调用该函数,否则会话数据无法保存和读取,导致首页检测不到登录状态,直接跳回登录页。

2. Header跳转前存在输出

header("Location: ...")必须在任何HTML输出之前执行,你的login.php先输出了form的HTML代码,再执行PHP逻辑,这会导致Header无法生效,页面只会原地刷新。

3. 跳转后未终止后续代码执行

调用header()后需要立即执行exit()或die(),防止后续代码继续运行可能干扰跳转逻辑。

4. 存在SQL注入风险(额外修复)

直接将用户输入的$uname拼进SQL语句,会导致严重的SQL注入漏洞,必须使用预处理语句修复。


修改后的代码示例

login.php

<?php
// 先启动会话
session_start();
require 'config1.php';

if(isset($_POST["submit"])){
    $uname = $_POST["uname"];
    $psw1 = $_POST["psw1"];
    
    // 使用预处理语句防止SQL注入
    $stmt = mysqli_prepare($conn, "SELECT * FROM Users WHERE Username = ?");
    mysqli_stmt_bind_param($stmt, "s", $uname);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    $row = mysqli_fetch_assoc($result);

    if(mysqli_num_rows($result) > 0){
        // 注意:实际项目中绝不能明文存储密码,应该使用password_hash和password_verify
        if($psw1 == $row["Password"]){
            $_SESSION["login"] = true;
            $_SESSION["id"] = $row["id"];
            header("Location: index.php");
            // 终止后续代码执行
            exit();
        } else {
            echo "<script> alert('密码错误'); </script>";
        }
    } else {
        echo "<script> alert('用户未注册'); </script>";
    }
}
?>
<form action="" method="post">
UserName:  <input type="text" name="uname"><br>
Password: <input type="password" name="psw1"><br> <!-- 密码输入建议用type="password" -->
<button type="submit" name="submit">Login</button>
</form>

index.php

<?php
session_start(); // 启动会话
require 'config1.php';

if(empty($_SESSION["id"])){
    header("Location: login.php");
    exit();
}

$id = $_SESSION["id"];
// 同样用预处理语句防止注入
$stmt = mysqli_prepare($conn, "SELECT * FROM Users WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_assoc($result);
?>
<!DOCTYPE html>
<html>
<body>
<h1>Welcome <?php echo $row["name"]; ?></h1>
<a href="logout.php">Log out</a>
</body>
</html>

额外注意事项

  • 密码存储:实际项目禁止明文存储密码,注册时用password_hash()加密,登录时用password_verify()验证。
  • 错误提示:尽量避免用JS弹窗做错误提示,可直接在页面内输出提示信息,提升用户体验。

内容的提问来源于stack exchange,提问作者Daniel Alamba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:10:35