要維持會話特定的時間並在之後終止它,建議實現自定義會話超時。這種方法比依賴 session.gc_maxlifetime 或 session.cookie_lifetime 等會話設定更可靠。
1。 session.gc_maxlifetime:
session.gc_maxlifetime 決定會話資料被視為「垃圾」並被刪除的時間量。然而,垃圾收集偶爾發生,使其成為一種不可靠的會話過期方法。
2. session.cookie_lifetime:
session.cookie_lifetime 僅影響發送到瀏覽器的 cookie 的生命週期,而不影響會話本身。伺服器負責使會話無效,而不是客戶端。
推薦解決方案:
透過維護追蹤上次活動時間的時間戳來實現自訂會話逾時。每次請求時更新此時間戳。
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { // last request was more than 30 minutes ago session_unset(); // unset $_SESSION variable for the run-time session_destroy(); // destroy session data in storage } $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
此方法有效地使會話資料在 30 分鐘的活動後過期,並防止垃圾收集器過早刪除。
為了增強安全性,請考慮定期重新產生用於防止會話固定的會話ID
if (!isset($_SESSION['CREATED'])) { $_SESSION['CREATED'] = time(); } else if (time() - $_SESSION['CREATED'] > 1800) { // session started more than 30 minutes ago session_regenerate_id(true); // change session ID for the current session and invalidate old session ID $_SESSION['CREATED'] = time(); // update creation time }
註解:
以上是如何在 30 分鐘不活動後有效地使 PHP 會話過期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!