HTTP 協議本質上是無狀態的,這意味著伺服器無法在多個請求之間識別同一用戶。早期 PHP 3.0 開發者只能依賴第三方庫、Cookie、隱藏表單欄位或資料庫來維持狀態,不僅繁瑣而且存在安全隱患。PHP 4.0 內建的 Session 支持徹底改變了這一局面,提供了一種簡單、安全且高效的伺服器端狀態管理機制。
當調用 session_start() 時,PHP 會檢查請求中是否包含 Session ID(通常透過 Cookie 傳遞,名為 PHPSESSID)。若不存在,則生成一個新的唯一識別碼(如 940f8b05a40d5119c030c9c7745aead9),並透過 Set-Cookie 標頭發送給瀏覽器;同時在伺服器端建立對應的臨時文件(預設路徑為 /tmp/sess_),用於儲存該會話的所有變數與值。
<?php
// 1. 必須在任何輸出之前調用
session_start();
// 2. 註冊會話變數(PHP 4.1+ 建議直接使用 $_SESSION 超全局陣列)
$_SESSION['count'] = isset($_SESSION['count']) ? $_SESSION['count'] + 1 : 1;
// 3. 讀取並顯示
echo "<br>您在此會話中已訪問 {$_SESSION['count']} 次。<br>";
// 4. 註冊陣列型變數
$_SESSION['favorites'] = ['巧克力', '咖啡', '啤酒', 'Linux'];
// 5. 銷毀特定變數
unset($_SESSION['count']);
// 6. 徹底銷毀整個會話(如登出操作)
session_destroy();
?>
利用 Session 陣列可輕鬆實現跨頁面的個性化體驗。例如在電商網站中,可將使用者瀏覽歷史、購物車內容、語言偏好等暫存於 Session,避免頻繁查詢資料庫,降低伺服器負載。
session.cookie_secure=1 與 session.cookie_httponly=1。高流量網站可考慮將 Session 儲存介面改為 Redis、Memcached 或資料庫,透過 session_set_save_handler() 實現分散式 Session 共享,支援多伺服器負載均衡架構。
PHP Session 以極簡的 API 解決了 Web 應用的狀態管理難題:一個 Cookie、一組伺服器端變數,即可實現用戶識別、資料暫存與安全控制。掌握其核心機制與最佳實踐,是每位 PHP 開發者的必修課。