2011-03-22 159 views
3

我有一個javax.servlet.http.HttpSessionListener的實現,它應該在Struts項目中檢測用戶會話失效/超時。HttpSessionListener沒有檢測到會話超時

sessionDestroyed()似乎永遠不會被調用,我可以通過刪除我的JSESSIONID和刷新頁面來重現此問題。我還發現讓瀏覽器保持打開狀態,直到會話超時具有相同的效果。

該站點運行在帶有Java 1.5的JBoss 4.2.3.GA中。

我開始懷疑HttpSessionListener沒有做到我期望的那樣,我是否錯過了什麼?

編輯:

我的聽衆是註冊在我的web.xml如下:

<listener> 
    <listener-class>com.domain.web.listener.LogoutListener</listener-class> 
</listener> 
+0

您是否在web.xml中配置了偵聽器? – 2011-03-22 11:12:10

+0

@Suresh是的,我的監聽器是在web.xml中配置的;將更新我的問題 – seanhodges 2011-03-22 11:53:51

+0

我有與Tomcat和Java 1.7相同的問題:'sessionDestroyed'並不總是在會話超時後瀏覽器打開時調用。 – Andremoniy 2014-01-15 08:43:17

回答

5

sessionDestroyed()方法不叫,直到Web容器到期的會話。服務器不知道你刪除了JSESSIONID cookie,你的瀏覽器看起來像另一個新的會話。

從我看到的Tomcat中,我相信這取決於每個Web容器的實現,會話過期每分鐘都會發生。所以即使會議超時,在下次檢測到期限之前也可能會有延遲。

但它最終肯定會發生。特別是如果您將超時設置爲一分鐘並等待幾分鐘。請注意,超時時間是以分鐘爲單位指定的,因此一分鐘是測試的最小時間。我假設你有你的聽衆註冊在你的web.xml文件中?

+0

這很有道理,我會嘗試調整JBoss中的會話超時以查看我是否已經等待了足夠長的時間。 – seanhodges 2011-03-22 11:59:14

-2

您需要在您的應用程序的WEB-INF下的web.xml中註冊監聽器。 您的聽衆類名稱