現在的網站都流行登入後, 除非按了登出, 不然就永遠是登入狀態(永不過期).(註: 相對需要更注意使用者帳號的安全問題)
不過, 這樣子設的話, 計算 目前站上人數 就得要另外想辦法做囉~ 🙂
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 中.