当前位置: 首页> 最新文章列表> 利用 header() + session_start() 做登录跳转

利用 header() + session_start() 做登录跳转

M66 2025-06-02

在 Web 开发中,用户登录后的页面跳转是非常常见的功能。使用 PHP,我们可以通过 session_start() 来管理用户的登录状态,再结合 header() 函数实现页面的重定向。本文将一步步讲解如何实现这一功能。

1. 理解 session 和 header

  • session_start()
    session_start() 是 PHP 中用于开启会话的方法。它会在服务器端保存用户的信息,比如用户名、用户 ID 等,从而在多次请求中识别同一用户。

  • header()
    header() 是 PHP 用来发送原始 HTTP 头部信息的函数。常见用途之一是发送 Location 头,从而让浏览器跳转到另一个页面。

需要注意:

  • header() 必须在输出任何内容(包括空格或 HTML)之前调用。

  • session_start() 也要在任何输出之前调用。

2. 实现步骤

假设我们有一个简单的登录表单,登录成功后需要跳转到用户的个人主页。

登录表单页面(login.php)

<?php
// 开启 session
session_start();
?>
<!DOCTYPE html>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
<form method="post" action="login_process.php">
    用户名: <input type="text" name="username"><br>
    密码: <input type="password" name="password"><br>
    <input type="submit" value="登录">
</form>
</body>
</html>

登录处理页面(login_process.php)

<?php
session_start();

// 模拟的用户名和密码
$correct_username = 'admin';
$correct_password = '123456';

// 获取提交的数据
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';

// 检查用户名和密码是否正确
if ($username === $correct_username && $password === $correct_password) {
    // 登录成功,设置 session
    $_SESSION['username'] = $username;

    // 跳转到用户主页
    header('Location: https://m66.net/user_home.php');
    exit;
} else {
    // 登录失败,跳转回登录页
    header('Location: https://m66.net/login.php?error=1');
    exit;
}
?>

用户主页(user_home.php)

<?php
session_start();

// 检查是否已登录
if (!isset($_SESSION['username'])) {
    // 如果没有登录,跳转到登录页面
    header('Location: https://m66.net/login.php');
    exit;
}

$username = $_SESSION['username'];
?>
<!DOCTYPE html>
<html>
<head>
    <title>欢迎,<?php echo htmlspecialchars($username); ?></title>
</head>
<body>
<h1>欢迎回来,<?php echo htmlspecialchars($username); ?>!</h1>
<p><a href="logout.php">退出登录</a></p>
</body>
</html>

退出登录页面(logout.php)

<?php
session_start();
session_unset();
session_destroy();

// 跳转回登录页面
header('Location: https://m66.net/login.php');
exit;
?>

3. 注意事项

  • 输出前调用 header() 和 session_start()
    只要页面上有任何输出(包括 HTML、空格、换行等),header()session_start() 都会报错。确保它们在文件最顶部调用。

  • 安全性
    示例代码中用户名和密码是写死的,实际项目中应从数据库中获取,并使用加密(如 password_hash()password_verify())。

  • 退出登录
    退出时一定要清理 session,否则即使跳转回登录页,用户状态依然存在。