三種認證方式對比
| 方式 | 特點 | 適用場景 |
| HTTP Basic Auth | 瀏覽器原生彈窗,每請求攜帶憑證 | 簡單內部系統、API |
| Session | 服務端存儲,客戶端僅存 Session ID | 傳統 Web 應用、狀態管理 |
| Cookie | 客戶端存儲,自動隨請求發送 | 記住登錄、偏好設定、追蹤 |
HTTP Basic Auth 實現
<?php
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) {
header('WWW-Authenticate: Basic realm="My Private Area"');
header('HTTP/1.0 401 Unauthorized');
exit('Authorization Required.');
}
if ($_SERVER['PHP_AUTH_USER'] !== 'validname' || $_SERVER['PHP_AUTH_PW'] !== 'goodpassword') {
header('WWW-Authenticate: Basic realm="My Private Area"');
header('HTTP/1.0 401 Unauthorized');
exit('Authorization Required.');
}
echo 'You are authorized.';
?>
Cookie 核心 API
<?php
// 設置
setcookie('name', 'value', [
'expires' => time() + 3600,
'path' => '/',
'domain' => '',
'secure' => true, // 僅 HTTPS
'httponly' => true, // 防 XSS
'samesite' => 'Lax'
]);
// 讀取 (自動解析到 $_COOKIE)
echo $_COOKIE['name'];
// 刪除
setcookie('name', '', ['expires' => time() - 3600]);
?>
Session 核心 API
<?php
session_start();
// 讀寫 $_SESSION 超全局陣列
$_SESSION['user_id'] = 1001;
echo $_SESSION['user_id'];
// 銷毀
session_unset();
session_destroy();
?>
安全最佳實踐
- Cookie 關鍵資料必須加密簽名 (如
authcode 或 JWT)
- 啟用
HttpOnly、Secure、SameSite
- Session ID 定期重生成
session_regenerate_id(true)
- 敏感操作二次驗證 (CSRF Token、再次輸入密碼)
- 分佈式環境使用 Redis/Memcached 做 Session 共享存儲