2012-09-13 50 views
2

我想使用Zend_Session_Handler_DbTable將會話數據保存到數據庫,但據我所知,過期的會話永遠不會從數據庫中刪除。使用Zend_Session_Handler_DbTable時的垃圾收集

我可以看到一個正在運行的cron作業(ubuntu),它刪除了基於文件的會話,但是我找不到gc如何在db中保存的會話中工作。

回答

6

Zend_Session_SaveHandler_DbTable類有一個垃圾回收方法gc,當您撥打Zend_Session::setSaveHandler()時,該垃圾回收方法通過session_set_save_handler給予PHP。

gc函數應根據php.ini值session.gc_probabilitysession.gc_divisor定期調用。確保將這些值設置爲會導致垃圾收集在某個點運行的某些值。

還要確保創建DBTABLE保存處理程序,因爲默認gc函數使用這些列,以確定哪個會話錶行是舊的,應當刪除,當你指定modifiedColumnlifetimeColumn選項。

+0

這是一個很好的答案!非常感謝 – Optimus

+0

@ drew010,所以設置resources.session.saveHandler.gc_probability = 1 resources.session.saveHandler.gc_divisor = 1000或者application.ini中的某種東西是不夠的?我需要在php.ini中編輯它?看來我的垃圾收集只在編輯php.ini後才起作用,並且不聽我設置的application.ini值。 – Darius