$_SESSION 是 PHP 儲存跨請求使用者資料的核心機制。本文涵蓋啟動、讀寫、刪除、銷毀、安全設定與陣列操作完整指南。
<?php
// 1. 必須在任何輸出前呼叫
session_start();
// 2. 寫入資料(關聯陣列)
$_SESSION['user'] = [
'id' => 123,
'name' => 'Alice',
'role' => 'admin',
'login_at' => time(),
];
// 3. 讀取資料
$userId = $_SESSION['user']['id'] ?? null;
$userName = $_SESSION['user']['name'] ?? 'Guest';
// 4. 刪除特定鍵
unset($_SESSION['user']['login_at']);
// 5. 銷毀整個 Session(登出)
// session_unset(); // 僅清空 $_SESSION 陣列
// session_destroy(); // 刪除伺服器端 Session 檔案與 Cookie
?>
; 安全相關建議值
session.use_strict_mode = 1 ; 拒絕未初始化的 Session ID
session.use_only_cookies = 1 ; 僅透過 Cookie 傳遞 ID(防 Session Fixation)
session.cookie_httponly = 1 ; 禁止 JS 存取 Cookie(防 XSS 竊取)
session.cookie_secure = 1 ; 僅 HTTPS 傳輸 Cookie(生產環境必須)
session.cookie_samesite = "Strict" ; CSRF 保護 (Lax/Strict/None)
session.gc_maxlifetime = 1440 ; 垃圾回收壽命(秒),24分鐘
$_SESSION['cart']、$_SESSION['user']),避免鍵名衝突。$cart = &$_SESSION['cart']; $cart[] = $item; 直接修改 Session 陣列。isset($_SESSION['key']) 或 array_key_exists('key', $_SESSION)。<?php
session_start();
// 登入成功後,重新產生 Session ID(保留資料)
if ($loginSuccess) {
session_regenerate_id(true); // true = 刪除舊 Session 檔案
}
?>
<?php
// php.ini 或 runtime
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379?auth=password');
// 或使用 Memcached
// ini_set('session.save_handler', 'memcached');
// ini_set('session.save_path', '127.0.0.1:11211');
session_start();
?>
$_SESSION 操作簡單但安全設定關鍵。啟用 use_only_cookies、httponly、secure、samesite、strict_mode 並登入後 session_regenerate_id(),可抵禦大多數 Session 相關攻擊。希望本文對您的 PHP 程式設計有所幫助。