X

PHP 設定 session 的過期時間

現在的網站都流行登入後, 除非按了登出, 不然就永遠是登入狀態(永不過期).(註: 相對需要更注意使用者帳號的安全問題)

不過, 這樣子設的話, 計算 目前站上人數 就得要另外想辦法做囉~ 🙂

Session 過期時間參數

設定過期時間參數, 主要是設定 session.gc_maxlifetime 的參數即可, 再保險一點的設定, 就設定下面這兩個參數.

  • ini_set('session.cookie_lifetime', 0); // 可用 print_r(session_get_cookie_params()); 觀察
  • ini_set('session.gc_maxlifetime', 3600); // 可用 echo ini_get("session.gc_maxlifetime"); 觀察

session_cookie_lifetime 設為 0 的話, 代表等到 browser 才把此 cookie 清掉.(session 和 browser cookie 是有相關的)

如果懶得想這些, 直接用下面的 function 就可以了~ 😛

Session 過期時間程式

下述程式轉載自: Cross-Browser Session Starter


<?php
function start_session($expire = 0)
{
    if ($expire == 0) {
        $expire = ini_get('session.gc_maxlifetime');
    } else {
        ini_set('session.gc_maxlifetime', $expire);
    }

    if (empty($_COOKIE['PHPSESSID'])) {
        session_set_cookie_params($expire);
        session_start();
    } else {
        session_start();
        setcookie('PHPSESSID', session_id(), time() + $expire);
    }
}
?>

使用方式

  • 於程式最上方加入: start_session(600); // 代表 600 秒後會過期 (取代原本 session_start())

如果要再延長過期時間, 只要再做修改即可.

但是有個問題要注意, 就是 PHP 的 session 預設是存成 file, 所以 /tmp 可能會因這樣設定而爆掉(檔案太多), 通常解法是把 session 存進 DB/memcache 中.

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post