昨天有介紹 Cookie,今天介紹 Session。
Session 是儲存在伺服器端的使用者資料,每個使用者瀏覽器會有一個 唯一的 Session ID,通常存放在 Cookie 裡。它的特點包括:
資料存在伺服器 → 比 Cookie 安全
可以存敏感資料(例如帳號、權限、購物車)
關閉瀏覽器或 Session 過期 → 資料消失
適合管理登入狀態、購物車、個人化設定等
剛剛說的是Session在瀏覽器的儲存位置
在 PHP 中,Session 的資料預設會存在伺服器的檔案系統裡(通常在 /tmp 資料夾,或 php.ini 裡設定的 session.save_path)。
除了檔案外,也可以將 Session 儲存在其他地方,方便系統擴充或提升效能:
資料庫:方便多伺服器共享,適合需要登入狀態同步的應用。
記憶體快取(Redis、Memcached):效能更快,適合大型網站或即時系統
<?php
session_start();
if(isset($_SESSION["visits"])){
$_SESSION["visits"] += 1;
} else {
$_SESSION["visits"] = 1;
}
echo "你已經訪問本站 " . $_SESSION["visits"] . " 次!";
?>
可以用上述程式碼測試 Session 和 Cookie 的差別,不過建議用無痕模式測試,因為現代瀏覽器(例如 Chrome)常有「恢復上次分頁」或「保留 Session Cookie」功能,所以即使關閉瀏覽器,Session 有時仍然存在。
Cookie | Session | |
---|---|---|
存放地 | 使用者瀏覽器 | 伺服器端 |
過期 | 可設定,每次刷新可延長 | 固定,由伺服器端控制(gc_maxlifetime) |
累加邏輯 | 每次刷新都可以用 setcookie() 延長過期時間 | 伺服器端 Session 過期時間固定,需要額外設定才會延長 |
安全性 | 較低,易被竄改或偷取 | 較高,敏感資料可存伺服器 |
適用場景 | 訪客偏好、簡單計數器 | 登入狀態、購物車、個人化設定 |