1. 程式人生 > >PHP會話控制之失效時間與過期回收機制

PHP會話控制之失效時間與過期回收機制

gutops session生命周期 php會話控制 session過期回收機制 sessions失效時間

PHP會話控制之失效時間與過期回收機制

session的生命周期

從session的初始化開始,直到註銷的這段時間稱之為sesssion生命周期。

設置session生命周期再php.ini中的相關參數

session.save_path
    設置保存的session文件路徑。

session.use_cookies = 1
    設置為1時,利用cookie來傳遞sessionid

session.cookie_lifetime = 0 (默認為0)
    設置sessionid在客戶端cookie存儲的時間,默認為0,即關閉瀏覽器就失效。

session.gc_maxlifetime = 1440(默認值 單位為秒)
    設置session存活時間
    原理:每次GC啟動後,會通過stat得到session文件最後訪問的unix時間,
    通過現在的時間減去最後訪問的時間,大於session.gc_maxlifetime,則認為
    該session已過期,但該文件並沒有被刪除。因為php5的session采用被動回收
    機制,過期的session是不會自己消失的,而是通過觸發回收機制來處理過期的
    session。下面兩個參數為回收機制的配置。

session.gc_probability = 1(默認值)
session.gc_divisor = 1000 (默認值)
    這兩個配置決定了gc的概率,默認為1/1000。也就是不是每個session信息都有
    100%的概率被系統當做垃圾來處理的。
    意味著每1000次請求會啟動一次gc回收session。
    因為啟動gc進程會影響php的執行效率,所以頻率不易太頻繁。

註意:gc僅會處理session.save_path中的session文件。

註意:

1.如果session文件沒有及時回收,達到GB或更大級別的時候,就會影響該站點存
取session的速度,進而影響相關功能。

2.有一種情況,當某用戶的會話是活躍的,只是session文件一直未修改,但是系
統認為它是失效的,導致session文件被‘誤刪除’。怎麽能避免這種情況呢?
<?php 
//手動去修改session文件的最後修改時間。
if(!isset($_SESSION[‘last_access‘])||(time()-$_SESSION[‘last_access‘])>60){ 
    $_SESSION[‘last_access‘] = time(); 
}
?>
反之手動設置過期該怎麽辦呢?
<?php 
    unset($_SESSION[‘last_access‘]);
    //也可以這樣 $_SESSION[‘last_access‘]=‘‘; 
?>

PHP中設置session永不過期

通過上述參數設置描述,可否想到如何能讓session用不過期?
1.session.cookie_lifetime = 99999999,前提是session.use_cookies = 1

2.session.gc_maxlifetime = 99999999

PHP會話控制之失效時間與過期回收機制