Rails如何知道何時從會話表中刪除記錄?Rails如何知道何時從`sessions`表中刪除記錄?
例如,如果用戶訪問該網站,一個會話記錄被創建,但是當用戶關閉瀏覽器窗口時,服務器不會得到任何通知,所以如何Rails的刪除會話表中的記錄?
Rails如何知道何時從會話表中刪除記錄?Rails如何知道何時從`sessions`表中刪除記錄?
例如,如果用戶訪問該網站,一個會話記錄被創建,但是當用戶關閉瀏覽器窗口時,服務器不會得到任何通知,所以如何Rails的刪除會話表中的記錄?
您必須提供自己的會話過期的,我的理解。
This API page爲您提供了一個相當不錯的答案是如何工作的。您可以使用額外的屬性created_on和updated_at創建數據庫表(並且您可以免費獲得時間戳),然後只需通過查看updated_at屬性創建一個作業,以便在需要時將其過期。
This post對如何運行作業的詳細信息。
有simplier方式:
ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", 12.hours.ago])
您可以在控制一些操作後調用它,這段代碼殺死所有的死會話。
當然是有爭議的技術,但最簡單的。
我真的想這樣做異步,就像從一個cronjob。 – Dogweather 2012-04-24 02:39:20
這個效果很好,通過rails runner和隨時隨地創建一個cron作業。 – Rystraum 2012-09-25 07:25:12
我們有類似的問題,並希望通過cron運行,所以我們正在試驗MySQL事件:http://dev.mysql.com/doc/refman/5.5/en/create-event.html。希望這可以幫助其他人跑進同樣的事情。 – 2013-03-04 18:08:18