PHP會話控制之失效時間與過期回收機制
阿新 • • 發佈:2018-03-31
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會話控制之失效時間與過期回收機制