首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

PHP Session 嚴格 30 分鐘過期實作:避開常見陷阱的正確姿勢

     編輯:更多程式設計知識

Session 與 Cookie 是面試必考題,深入理解其機制對求職至關重要。看似簡單的「設定 30 分鐘過期 Session」,實則暗藏多個陷阱。本文解析常見錯誤答案,並提供嚴格有效的實作方案。

錯誤答案一:僅設定 session.gc_maxlifetime

PHP 以機率觸發 GC(預設 1%),無法保證準時過期。且 GC 依據 Session 檔案修改時間判斷,若中途新增變數會重置計時。更嚴重的是,共享 /tmp 目錄時,其他應用的較短 gc_maxlifetime 會誤刪本應用的 Session。

錯誤答案二:設定 session.cookie_lifetime

這只控制瀏覽器端 Cookie 過期,惡意用戶仍可攜帶舊 Session ID 請求,伺服器端 Session 實際未銷毀。

錯誤答案三:使用 Memcache/Redis

雖正確,但面試官通常會追問:若只能用原生 PHP 怎麼辦?

正確實作:雙重驗證 + 時間戳記

  1. 同時設定 Cookie 與 Session 生命週期為 30 分鐘(session.cookie_lifetime = 1800、session.gc_maxlifetime = 1800)。
  2. 在 Session 中儲存建立時間戳($_SESSION['created'] = time())。
  3. 每次請求檢查:if (time() - $_SESSION['created'] > 1800) { session_destroy(); }。

此方案不依賴 GC 機率,繞過共享目錄干擾,也能抵禦偽造 Session ID 攻擊,真正達成嚴格 30 分鐘過期。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved