星期三, 十月 08, 2008

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 就可以了~ :P

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 中.

相關標籤

this is comment icon 請問Tsung大,小弟網站一直無法延長Session時間 [回覆]

Tsung大
小弟在PHP還是生手
可否請問
小弟是租用美國iPower的主機
在主機的php.ini看是顯示1440秒
session.gc_maxlifetime = 1440
不過我每次登入網站後
沒多久就被登出了
明明登入沒有幾分鐘
回來後就被登出了
而且時間都不同
有時幾分鐘
有時十幾分鐘
感覺真的很不方便
真不曉得為何會這樣
是Server或程式有問題嗎
小弟也有在小舖發問
但還是無法解決
這是測試網址:
http://www.paohuang.com.tw/SessionTest/Login.php

這是小弟發問的網址
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20090901231637FHU&fumcde=FUM20041006152627A9N

可否請求Tsung大指點
感激不盡
謝謝

Comment by ironman (09/04/2009 22:51)

this is comment icon [回覆]

目前有在session.save_path 指定的/tmp
放一個tmp的資料夾
並將權限都設為777
已有看到一些sess_c70bf812117ed305f2200561b6b5f6bd的檔案出現
這樣不知正不正確
謝謝

Comment by ironman (09/05/2009 01:46)

this is comment icon 回 ironman [回覆]

您要不要試試把我上面那個 function 拿去用.
session_start() 就改成 start_session(600); 這樣子看看, 看看是不是 600秒後會登出? :)

Comment by Tsung (09/05/2009 09:10)
Add this page to del.icio.us

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~