我們最常用的是在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