Session 與 Cookie 是面試必考題,深入理解其機制對求職至關重要。看似簡單的「設定 30 分鐘過期 Session」,實則暗藏多個陷阱。本文解析常見錯誤答案,並提供嚴格有效的實作方案。
session.gc_maxlifetimePHP 以機率觸發 GC(預設 1%),無法保證準時過期。且 GC 依據 Session 檔案修改時間判斷,若中途新增變數會重置計時。更嚴重的是,共享 /tmp 目錄時,其他應用的較短 gc_maxlifetime 會誤刪本應用的 Session。
session.cookie_lifetime這只控制瀏覽器端 Cookie 過期,惡意用戶仍可攜帶舊 Session ID 請求,伺服器端 Session 實際未銷毀。
雖正確,但面試官通常會追問:若只能用原生 PHP 怎麼辦?
session.cookie_lifetime = 1800、session.gc_maxlifetime = 1800)。$_SESSION['created'] = time())。if (time() - $_SESSION['created'] > 1800) { session_destroy(); }。此方案不依賴 GC 機率,繞過共享目錄干擾,也能抵禦偽造 Session ID 攻擊,真正達成嚴格 30 分鐘過期。