Session 解決 HTTP 無狀態痛點,在伺服器端保存用戶狀態,客戶端僅持有 `session_id`。本文系統梳理原理、API、跨頁難題與安全加固。
| 操作 | 正確寫法 | 廢棄/錯誤寫法 |
|---|---|---|
| 啟動 | `session_start()` | 無 |
| 註冊變數 | `$_SESSION['key'] = $val` | `session_register()` |
| 讀取變數 | `$_SESSION['key']` | `$HTTP_SESSION_VARS['key']` |
| 檢查存在 | `isset($_SESSION['key'])` | `session_is_registered()` |
| 刪除單個 | `unset($_SESSION['key'])` | `session_unregister()` |
| 銷毀所有 | `$_SESSION=[]; session_destroy();` + 刪 Cookie | `session_unset()` |
| 重新生成 ID | `session_regenerate_id(true)` (參數 true 刪除舊檔) | 無 |
| 設定/取得名稱 | `session_name('NEWNAME')` / `session_name()` | 無 |
常見失效原因:客戶端禁用 Cookie + 未開啟 `use_trans_sid` / Windows 不支援透明 SID + 相對路徑連結被緩存/重寫失效。
<?php
session_start();
$_SESSION = []; // 清空陣列
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
session_destroy(); // 刪除伺服器端檔案
?>
掌握 Session 全生命週期管理,構建安全可靠的用戶狀態體系。