首頁 >後端開發 >php教程 >如何在 30 分鐘不活動後有效地使 PHP 會話過期?

如何在 30 分鐘不活動後有效地使 PHP 會話過期?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-23 11:23:12744瀏覽

How Can I Effectively Expire a PHP Session After 30 Minutes of Inactivity?

PHP 會話在 30 分鐘後過期

要維持會話特定的時間並在之後終止它,建議實現自定義會話超時。這種方法比依賴 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
}

註解:

  1. 將session.gc_maxlifetime 設定為至少與自訂過期處理程序一樣長。
  2. 對於基於活動而不是會話開始的會話過期,請使用 setcookie 將 cookie 過期時間設定為 30分鐘。

以上是如何在 30 分鐘不活動後有效地使 PHP 會話過期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn