在apache與php的環境中默認過期時間是20分鐘左右,那麼我們要怎麼設置session過期呢,下面看具體方法總結。
我們最常用的是在php程序中設置
代碼如下 復制代碼<?php
if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)
$_SESSION['last_access'] = time();
?>
這樣就搞定了,如果要設置過期的話也可以在程序中實例
代碼如下 復制代碼<?php
unset($_SESSION['last_access']) 或 $_SESSION['last_access']='';
?>
session有過期的機制
session.gc_maxlifetime 原來session 過期是一個小概率的事件,分別使用session.gc_probability和session.gc_divisor 來確定運行session 中gc 的概率 session.gc_probability和session.gc_divisor的默認值分別為 1和100
分別為分子和分母 所以session中gc的概率運行機會為1% 。如果修改這兩個值,則會降低php的效率。所以這種方法是不對的!!
所以,修改php.ini文件中的gc_maxlifetime變量就可以延長session的過期時間了:(例如,我們把過期時間修改為86400秒)
代碼如下 復制代碼session.gc_maxlifetime = 86400
然後,重啟你的web服務(一般是apache)就可以了。
session“回收”何時發生?
默認情況下,每一次php請求,就會有1/100的概率發生回收,所以可能簡單的理解為“每100次php請求就有一次回收發生”。這個概率是通過以下參數控制的
代碼如下 復制代碼#概率是gc_probability/gc_divisor
session.gc_probability = 1
session.gc_divisor = 100
注意1:假設這種情況gc_maxlifetime=120,如果某個session文件最後修改時間是120秒之前,那麼在下一次回收(1/100的概率)發生前,這個session仍然是有效的。
注意2:如果你的session使用session.save_path中使用別的地方保存session,session回收機制有可能不會自動處理過期session文件。這時需要定時手動(或者crontab)的刪除過期的session:cd /path/to/sessions; find -cmin +24 | xargs rm