因為發現session 理當在關閉瀏覽器之後會自動closed,但是事實上卻不是!
由於server並不會知道使用者有沒有關閉瀏覽器,所以必須等到系統時間到,server去garbage
閒置的session( 時間可以在php.ini 內的 session.gc_maxlifetime去調整),但是server通常很忙就
算去garbage 能夠正確抓到閒置的session的機率大概也只有1%當然或許你可以透過調整
php.ini裡面的session.gc_probabity 與 session.gc_divisor的參數,但是一旦調高連帶server效能也會
下降很多,所以我們可以自己寫一隻程式放在每個要確保使用者登入的頁面裡做檢查session
過期自動清除與登出的動作。
----------------------------------------------------------------------------------------------
if ( isset($_SESSION[ ' time ' ]) && (time( )-$_SESSION[ ' time ' ] > 1800))
{
//last request was more than 30 minutes age
session_unset( );
session_destroy( );
}
$_SESSION[ ' time ' ] = time( );
------------------------------------------------------------------------------------------------
我們可以在login之後紀錄當時的時間,跳到每個頁面的時候就做檢查當下的時間
若距離上一次更動到session 的時間超過30分鐘,就自動清空session與殺掉等於就是
使用者若閒置超過30分鐘就會自動登出,或是在沒有登出的時候關閉瀏覽器也會在
30分鐘後無法重新使用這個session來跳過登入過程。
資料參考:
http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes/1270960#1270960
留言
張貼留言