2012-03-12 116 views
0

我在CakePHP中使用數據庫會話,也保存與會話相同的表中的用戶ID。是否有可能在用戶會話過期時以某種方式檢測到,以便我可以更新數據庫中的一個字段?cakephp會話超時更新字段

我需要,以防萬一用戶沒有從網站手動註銷(只關閉瀏覽器或甚至沒有)我可以從表中刪除該會話。

+0

數據庫會話會在一段時間後自動清理,就像常規會話一樣。這是他們的觀點*超時*。你想在這裏手動做什麼? – deceze 2012-03-13 00:04:08

+0

好,那就是我的想法。我有超時到「1」(在中等安全級別,所以我相信100秒超時)。我已經完成了登錄,並且可以在會話數據庫中看到記錄。我一直在從MySQL管理員那裏檢查一段時間(超過30分鐘),刷新頁面並試圖用不同位置的相同用戶名登錄,但該記錄尚未刪除。在完成數據庫表的刷新後,它終於被刪除了。 – Albert 2012-03-13 00:20:12

+0

所以我的問題是,會話超時實際上是如何工作的數據庫會話?究竟是什麼觸發了從該表中刪除記錄的事件?它是否需要訪問該網站?或者當會話過期時發生? – Albert 2012-03-13 00:22:23

回答

0

會話數據清理依賴於垃圾回收(gc)。這個垃圾收集過程只有在PHP腳本運行時纔會被調用,也就是說,它在清理時不會清理數據,但之後有一段時間另一個PHP腳本正在運行。由於垃圾收集也會佔用一些資源,因此它不會每次都運行,但是每次腳本調用都有一定的可能性。 The default is that gc runs about once every 100 script invocations.

所以你不會看到陳舊的數據立即消失。相反,它最終會被清理掉。

+0

好的,這意味着一旦會話過期,會話表中的這些記錄將最終被刪除,而不必創建一些代碼來執行該操作。 – Albert 2012-03-13 00:55:31

+0

是的,完全正確。 – deceze 2012-03-13 00:58:42

+0

很酷,非常感謝你! – Albert 2012-03-13 02:07:01