HTTP 協定本質是無狀態的,每次請求獨立,伺服器無法辨識同一用戶的多次請求。Session 機制透過 Session ID(通常存於 Cookie)將分散的請求關聯起來,在伺服器端建立持久化儲存空間,實現跨請求的狀態保持。
PHPSESSID)或 URL 參數傳遞。session.save_path),對應 Session ID 的鍵值對集合。session_start()) → 產生 Session ID → 以 Set-Cookie 回應瀏覽器。$_SESSION 超全域陣列。$_SESSION 寫回儲存介質。| 特性 | 說明 |
|---|---|
| 隔離性 | 用戶 A 的 $_SESSION['user'] 與用戶 B 互不干擾 |
| 伺服器端儲存 | 敏感資料不暴露於客戶端,較 Cookie 安全 |
| 生命週期 | 受 session.gc_maxlifetime(預設 1440 秒)控制,瀏覽器關閉通常即失效 |
| 跨腳本共享 | 同一 Session ID 下,所有 PHP 腳本可讀寫同一 $_SESSION |
<?php
// 必須在任何輸出前呼叫
session_start();
// 寫入
$_SESSION['username'] = 'wind';
$_SESSION['login_time'] = time();
// 讀取
echo "歡迎," . $_SESSION['username'];
// 刪除單一鍵
unset($_SESSION['login_time']);
// 銷毀整個 Session
session_destroy(); // 並不會立即清除 $_SESSION,需搭配 $_SESSION = [];
?>
session.cookie_httponly=1、session.cookie_secure=1(HTTPS)、定期 session_regenerate_id(true)。SessionHandlerInterface。session.use_trans_sid=1 自動在 URL 附加 SID,但有安全風險(記錄檔洩漏)。Session 是 PHP 解決 HTTP 無狀態的核心機制,將狀態移至伺服器端,兼顧安全與便利。理解其生命週期、儲存機制與安全設定,是建構健壯 Web 應用的基礎。