2015-12-02 115 views
3

在會話獲取自動/手動銷燬之前,有什麼方法可以調用自定義方法嗎?在會話自動銷燬之前調用自定義方法

我的問題是,我捕捉用戶的退出時間在DB。當用戶手動註銷(通過調用註銷方法)時它的工作正常,但當用戶會話在超時後被自動銷燬時,我無法捕獲註銷時間。

欣賞關於此的建議。

+0

會話被銷燬後用戶是否需要重新登錄?即會話是你記錄用戶登錄的地方?如果是這樣,他們下次登錄記錄舊登錄會話必須過期的事實? –

回答

1

在PHP中可以實現SessionHandlerInterface和使用您的自定義代碼上destroy()方法GC()(見註釋),這裏更多信息 - http://php.net/manual/en/class.sessionhandlerinterface.php

Yii中,你可以設置一個custom session handler

+0

第二個鏈接是不正確解析:-( – aeryaguzov

+0

的問題,這是'毀滅()':摧毀會話時明確破壞纔會被調用,而不是當它是由垃圾收集器銷燬'破壞($的sessionId) 這當會話與session_destroy破壞()或session_regenerate_id()被執行與銷燬參數設置爲TRUE.' – Byson

+0

然後,你需要實現** GC()**回調。 – aeryaguzov

1

是的,這是可能的。 See this website for a in-depth tutorial
使用session_set_save_handler()PHP doc),你可以添加自己的功能爲GC(垃圾回收)週期。這樣您就可以知道哪個會話即將被該垃圾回收週期銷燬,並用當前時間戳手動更新數據庫中的這些記錄。

如果再通過調用你已經基本上插入自己的邏輯的位之間的默認GC處理結束你的函數。