2014-05-09 30 views
0

我需要擴展PHP的垃圾收集器,所以當它刪除舊會話時,它也應該刪除一些數據庫條目。我嘗試過使用SessionHandlerInterface的實現,但它不起作用。我應該在哪裏添加我的代碼?是否有可能或者這些實現與標準的session_destroy調用有關,而不是垃圾收集器的破壞?PHP擴展垃圾回收器

回答

1

函數session_set_save_handler允許您在多個會話事件(打開,關閉,讀取,寫入,銷燬和gc)上附加回調。在你的情況下,destroy和/或gc可能會這樣做。

+0

我已經嘗試了這兩種方法,它似乎並沒有被調用。你能提供一個例子嗎? – user3615971

+0

這是一個很好的例子,實現'gc'方法:[here](http://php.net/manual/en/function.session-set-save-handler.php#60316) – WickedYeti

+0

我不需要更改整個處理程序進程,只是在垃圾回收器刪除會話時執行額外的步驟。我想保留當前保存到文件夾的功能。 – user3615971

0

按照documentation

銷燬會話。由session_regenerate_id()(with $ destroy = TRUE),session_destroy()和session_decode()失敗時調用。

因此,只有在腳本期間顯式銷燬會話或發生錯誤時,纔會調用使用SessionHandlerInterface定義的銷燬函數。

要銷燬舊的會話,必須使用gc參數session_set_save_handler並刪除datetime < currenttime - $lifetime的所有條目。


編輯:

需要注意的是,只有具有gc稱爲在查詢beggining的1%的概率。這意味着它的執行很大程度上取決於您的服務器上有多少流量。當你獨自在測試服務器上工作時,你不能輕易執行它。