當前位置: 首頁> 最新文章列表> 如何設置PHP session 的生命週期和過期時間?

如何設置PHP session 的生命週期和過期時間?

M66 2025-06-06

在PHP 中,Session 是實現用戶身份識別、數據保持等功能的常用機制。默認情況下,Session 的生命週期和過期時間由服務器的配置文件(如php.ini )控制,但我們也可以通過session_start()之前的相關設置來自定義Session 生命週期。

本文將詳細講解如何通過session_start()設置Session 的生命週期和過期時間,以及相關注意事項。

一、理解Session 生命週期與過期時間

Session 生命週期由兩個部分組成:

  1. 客戶端Cookie 的過期時間:瀏覽器關閉後是否還保留Session ID。

  2. 服務端Session 數據的保存時間:即服務器上存儲Session 數據的生存週期。

這兩者都需要正確設置才能實現你期望的Session 生命週期。

二、設置Session 生命週期的關鍵函數

在調用session_start()之前,你可以使用以下兩個函數設置Session 生命週期:

  • session_set_cookie_params() :設置客戶端Cookie 的過期時間。

  • ini_set('session.gc_maxlifetime', 秒數) :設置服務端Session 數據的最大存活時間。

三、示例代碼

以下是一個設置Session 生命週期為1 小時(3600 秒)的示例:

<code> <?php // 設置服務器端Session 生命週期為1 小時ini_set('session.gc_maxlifetime', 3600);

// 設置客戶端Cookie 生命週期為1 小時
session_set_cookie_params([
'lifetime' => 3600,
'path' => '/',
'domain' => 'm66.net',
'secure' => true, // 僅在HTTPS 下發送Cookie(根據需要啟用)
'httponly' => true, // 禁止JS 訪問Cookie,提高安全性
'samesite' => 'Lax' // 防止CSRF 攻擊,可選值: Lax、Strict、None
]);

// 啟動Session
session_start();

// 設置一個Session 變量
$_SESSION['user_id'] = 1234;
?>
</code>

說明:

  • session.gc_maxlifetime :控制服務器保留Session 數據的時間。默認值通常是1440 秒(24 分鐘)。

  • session_set_cookie_params()lifetime參數決定了客戶端Cookie 的過期時間。如果為0,則表示“瀏覽器關閉即失效”。

四、Session 的垃圾回收機制

即使設置了gc_maxlifetime ,PHP 的垃圾回收機制也不是每次請求都會清除過期Session。其清除的概率由以下配置項決定:

 session.gc_probability = 1
session.gc_divisor = 100

表示有1% 的概率執行Session 清理。可根據需要調整。

五、結合實際項目使用建議

  • 如果你運行的是多個子域(如api.m66.netadmin.m66.net ),建議將domain設置為.m66.net以實現跨子域共享Session。

  • 使用HTTPS 時,務必設置securehttponly參數,以提升Session 安全性。

  • 定期清理過期Session 文件,避免堆積佔用服務器空間。

六、結語

通過合理配置session_set_cookie_paramssession.gc_maxlifetime ,我們可以靈活控制PHP Session 的生命週期,更安全、更高效地管理用戶狀態。在調用session_start()前進行這些設置,是實現定制化Session 行為的關鍵步驟。