在現代 Web 應用中,使用者登入流程通常採用前後端分離的模式:前端透過 AJAX 發送帳號密碼,後端驗證並建立 Session,前端再根據回應決定是否跳轉。本文將詳細拆解這一經典流程的實作邏輯與程式碼範例。
status: -1 及錯誤訊息,前端清空密碼欄位並提示重新輸入。status: 0 代表成功。window.location.href 跳轉至目標頁面(如首頁)。// 伪代码示例
$username = $_POST['username'];
$password = $_POST['password'];
$user = $db->query("SELECT * FROM users WHERE username = ?", [$username]);
if ($user && password_verify($password, $user['password_hash'])) {
$_SESSION['uuid'] = uniqid('user_', true);
echo json_encode(['status' => 0, 'msg' => 'success']);
} else {
echo json_encode(['status' => -1, 'msg' => '用戶名或密碼不正確']);
}
$.ajax({
url: '/api/login',
type: 'POST',
data: { username: $('#username').val(), password: $('#password').val() },
dataType: 'json',
success: function(res) {
if (res.status === 0) {
window.location.href = '/'; // 跳轉首頁
} else {
$('#password').val(''); // 清空密碼
alert(res.msg);
}
}
});
<nav>
<?php if (isset($_SESSION['uuid']) && !empty($_SESSION['uuid'])): ?>
<!-- 已登入:顯示使用者資訊 -->
<a href="#"><?= htmlspecialchars($_SESSION['nickname']) ?></a>
<?php else: ?>
<!-- 未登入:顯示登入按鈕 -->
<input type="button" value="登入" />
<?php endif; ?>
</nav>
password_hash() / password_verify() 處理,不可明文儲存。HttpOnly、Secure、SameSite 屬性。掌握「AJAX 非同步驗證 + Session 狀態管理 + 前端跳轉」這套經典模式,能快速建構安全且使用者體驗良好的登入系統。實務上可搭配 JWT、OAuth 2.0 等現代認證方案,依專案需求彈性擴充。