當前位置: 首頁> 最新文章列表> 利用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()都會報錯。確保它們在文件最頂部調用。

  • 安全性<br> 示例代碼中用戶名和密碼是寫死的,實際項目中應從數據庫中獲取,並使用加密(如password_hash()和password_verify( ) )

  • 退出登錄<br> 退出時一定要清理session,否則即使跳轉回登錄頁,用戶狀態依然存在