2011-06-23 60 views
6

我有一個HttpSessionListener的實現,其中應用程序中'鎖定'的資源與sessionDestroyed方法一起發佈。HttpSessionListener - 會話超時時調用sessionDestroyed方法嗎?

「鎖定」信息在數據庫中維護,鎖的釋放在大多數情況下工作正常。但在某些情況下,我仍然看到資源被鎖定 - 即使沒有活動會話!

所以,我懷疑是否有可能sessionDestroyed沒有被調用?假設如果會話超時 - 將調用sessionDestroyed方法嗎?

假設用戶關閉瀏覽器選項卡而不註銷(銷燬會話) - 那麼是否會調用監聽器?

在此先感謝!

回答

2

一個servlet引擎將處理會話超時。 它將自行確定會話何時不再有效,它將調用sessionDestroyed。 (這可能會在用戶關閉瀏覽器一段時間後發生)。

的其他一些觀點:

記錄

也許你可以添加一些記錄到sessionCreated和sessionDestroyed方法。對於每個sessionCreated你應該有一個sessionDestroyed。

Excepion處理

或許是由於東西保持鎖定狀態是不是因爲不被破壞的會話,但或許是由於您的sessionDestroyed邏輯錯誤。你有足夠的異常處理/日誌記錄嗎?

定時

你等待足夠長的時間來檢查你鎖定的資源? (關閉所有客戶端,並考慮在應用程序/服務器上配置的會話超時值)。如前所述,服務器無法檢測到關閉瀏覽器的用戶,但它確實保留了http會話列表,並且會在超時後將其銷燬。

+0

謝謝ddewaele!異常處理有竅門。我沒有發現數據庫異常。一旦處理異常並驗證結果,將測試應用程序。 – Ajay

1

所以,我懷疑是否有可能sessionDestroyed沒有被調用?假設會話超時 - 會調用sessionDestroyed方法嗎?

是的。會話在超時或者某人以編程方式到期時被銷燬(通過HttpSession.invalidate())。

假設用戶關閉瀏覽器選項卡而不註銷(銷燬會話) - 那麼監聽器是否會被調用?

不,因爲會話仍然有效。如果所述用戶再次打開該網站,則他/她的會話仍然有效。

HttpSessionjavadoc

通知是完全綁定的方法後發送。對於已失效或失效的會話,在會話失效或失效後發送通知。