在Web 開發中,用戶登錄後的頁面跳轉是非常常見的功能。使用PHP,我們可以通過session_start()來管理用戶的登錄狀態,再結合header()函數實現頁面的重定向。本文將一步步講解如何實現這一功能。
session_start()
session_start()是PHP 中用於開啟會話的方法。它會在服務器端保存用戶的信息,比如用戶名、用戶ID 等,從而在多次請求中識別同一用戶。
header()
header()是PHP 用來發送原始HTTP 頭部信息的函數。常見用途之一是發送Location頭,從而讓瀏覽器跳轉到另一個頁面。
需要注意:
header()必須在輸出任何內容(包括空格或HTML)之前調用。
session_start()也要在任何輸出之前調用。
假設我們有一個簡單的登錄表單,登錄成功後需要跳轉到用戶的個人主頁。
<?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>
<?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;
}
?>
<?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>
<?php
session_start();
session_unset();
session_destroy();
// 跳转回登入页面
header('Location: https://m66.net/login.php');
exit;
?>
輸出前調用header() 和session_start()
只要頁面上有任何輸出(包括HTML、空格、換行等), header()和session_start()都會報錯。確保它們在文件最頂部調用。
安全性<br> 示例代碼中用戶名和密碼是寫死的,實際項目中應從數據庫中獲取,並使用加密(如password_hash()和password_verify( ) )
退出登錄<br> 退出時一定要清理session,否則即使跳轉回登錄頁,用戶狀態依然存在