2012-10-30 47 views
8

在每次頁面加載時,我運行session_start()以恢復當前會話。 session.gc_maxlifetime從何時開始計數?第一次調用session_start()並設置了會話的cookie?或者定時器是否重新啓動每個session_start()session.gc_maxlifetime何時開始計數

隨着session.gc_maxlifetime設定爲約24分鐘的時候,在這個時間表應該會話數據被垃圾收集

1. 12:00:00 First page load, session_start(), session cookie created 
2. 12:10:00 page load, session_start() 
3. 12:26:00 page load, session_start() 
4. 12:55:00 page load, session_start() 

如果計時器上的第一個頁面加載session_start()開始,那麼我會想到它會垃圾收集負載3但如果它重置每session_start(),那就不是收集到負載4

我希望它是後者,因爲這樣我可以做一個JavaScript心跳每隔幾分鐘調用運行session_start()的頁面。

如果是前者,session.gc_maxlifetime從創建會話cookie開始計數,我需要銷燬/重新創建或regenerate_id重置計數?

+0

您是使用默認會話處理程序還是使用其他程序? – wgcrouch

+0

這是哲學還是有問題,你正試圖解決? – 2012-10-30 19:28:50

+0

默認會話處理程序 –

回答

2

它是從最後一次session_start()調用OR/AND最後一次寫入的時間。我的猜測是後者,因爲這會改變PHP垃圾收集器用來確定是否需要刪除的「最後修改」時間戳。在這種情況下,它將從最後一個腳本開始計數,以完成使用session_start()或通過調用session_ write_close()在腳本中間顯式完成。

P.S.這會使「心跳」變得簡單(在一行中):http://prototypejs.org/api/ajax/periodicalUpdater