2014-01-13 63 views
0

我試圖將中的的值改爲一個很小的值,以便我可以檢查會話超時是否正常工作,但會話永遠不會過期。我也重新啓動apache重新加載php.ini。 有誰知道可能是什麼原因?使用XAMPP,PHP的會話超時不起作用

+0

用於刪除舊會話(該指令的名字'gc'前綴)的垃圾收集過程不會被觸發你開始一個會話。你確定它確實在運行並且無法刪除舊數據嗎? –

+0

謝謝你回答我。我如何確認它實際上正在運行?我必須使用gc_enable()來啓用它嗎? –

+0

'gc_enable()'屬於一個*不同的垃圾收集器。我已經添加了答案。 –

回答

0

該指令被稱爲session.gc_maxlifetimeGC前綴提供了有關如何運作一個小提示:PHP包含一個內置的垃圾收集的過程,需要的物理磁盤刪除過時的會話數據的照顧。但是這個過程並不是在每個PHP請求上都啓動的,因爲那樣會產生不必要的開銷(甚至一個HTML文檔可能會觸發執行一些PHP腳本)。相反,它是隨機執行的。

從手動引用::這是通過以 「gc_」 啓動兩個其他指令控制

session.gc_divisor加上session.gc_probability定義 概率gc(垃圾收集)過程開始於每個sessi的 在初始化。概率通過使用 gc_probability/gc_divisor來計算,例如, 1/100意味着GC過程在每個請求開始時有1%的機會。

所有這一切意味着您無法真正知道session.gc_maxlifetime是否會在進程運行之前得到遵守。如果你在你的本地開發框中測試它,這個過程將運行很少的時間(不像你的活動服務器,每分鐘有一千個點擊)。

一個快速的辦法,迫使它每次都讓gc_probability等於gc_divisor這樣的概率變成1

+0

謝謝!現在更清楚了。我決定最終實現我自己的超時,但很高興知道它是如何工作的。 –