session.gc_maxlifetime
session.gc_probability
session.gc_divisor
session.gc_divisor 與 session.gc_probability 合起來定義了在每個會話初始化時啟動 gc(garbage collection 垃圾回收)進程的概率。此概率用 gc_probability/gc_divisor 計算得來。例如 1/100 意味着在每個請求中有 1% 的概率啟動 gc 進程。session.gc_divisor 默認為 100。
比如:session.gc_maxlifetime=30,session.gc_divisor=1000,session.gc_probability=1,就表示每一千個用戶調用session_start()的時候,就百分百的會執行一次垃圾回收機制,將磁盤上沒用的session文件刪除。
注意:一般對於一些大型的門戶網站,建議將session.gc_divisor調大一點,減少開銷
接下來,我通過一個例子演示下,如何配置才能讓調用gc(垃圾回收)進程呢!
通過配置php.ini文件,修改以下幾個信息:
- session.gc_maxlifetime = 60//當session文件在60s后還沒有被訪問的話,則該session文件將會被視為“垃圾文件”,並且等待gc(垃圾回收)進程的調用的時候被清理掉
- session.gc_probability = 1000
因為gc進程被調用的概率是通過gc_probability/gc_divisor 計算得來的,這里我將session.gc_probability改成1000,而session.gc_divisor 默認情況下也是1000。則gc進程在每次執行session_start()函數的時候都會被調用到。
以下我通過截圖簡單的說明下:

我開啟三個會話,則創建三個對應的session文件,當每個文件在30秒內都沒被調用的話,就會被當成是“垃圾文件”,等到gc進程調用的時候,“垃圾文件”就會被unlink,因為之前我已經通過修改php.ini配置文件,將gc被調用的概率改成百分百,所以接下來,如果我重新使用任何一個瀏覽器刷新下頁面的時候,三個session文件,應該只剩下一個了

