有趣的PHP Session機制

網站為了擔心Cross-site Request Forgery(CSRF/XSRF)攻擊,所以在增加csrf-token的session,在執行時判斷網頁的csrf-token值跟session是不是一樣。

不過發現即使設定gc_maxlifetime,仍會有可能出現應該過期的session還在的問題,這才發現原來php沒有一個daemon定時掃描過期的session,而是透過session.gc_probability/session.gc_divisor的設定來決定是否啟動Garbage Collector機制的機率。

解決的方式有幾種:
1.提高session.gc_probability/session.gc_divisor的機率,不過會造成系統的性能降低。

2.如果有更動gc_maxlifetime的話,也要跟著更動session.save_path,或者使用session_save_path()

自己使用了另一個方式,增加了csrf-time,自己檢查過期的話就unset Session。