2015-11-03 62 views
3

我正在使用Wicket在Jetty服務器上運行的web應用程序。Wicket意外會話ID

在特定情況下,應用程序的用戶會自動丟失會話,直到他關閉瀏覽器才能再次登錄。 (我已排除會話超時並故意註銷)

什麼是記錄會話失效並追蹤此問題原因的最佳方法?

+0

你有沒有排除,你(或其他人)在服務器重新啓動的可能性? – aioobe

+0

是的,它發生在幾個星期內,隨機時間和應用程序中的頁面。與服務器重啓無關 – Cloud

+0

也可能只是會話超時。 –

回答

3

在Jetty方面,您可以設置一個servlet javax.servlet.http.HttpSessionListener來記錄各種創建/銷燬事件。

創建自己的這個類,並將其添加到您的WEB-INF/web.xml

<web-app> 
    <listener> 
     <listener-class>MySessionListener</listener-class> 
    </listener> 
+0

或者您可以使用'@ WebListener'註釋:http://docs.oracle.com/javaee/7/api/javax/servlet/annotation/WebListener.html並實現'HttpSessionListener'接口。 –

+0

我試過這種方法,它有助於獲得有關會話失效和創建的調試信息。它不能幫助我追蹤這個問題,因爲它在這個過程中提供的信息太晚了。 我正在尋找傳入的jsessionid在某種'內部會話id表'中是否存在的檢查點。如果會話ID不被識別,它應該在日誌中發出警告。 (現有的cookie,錯誤的ID) – Cloud

1

你可以寫的WebSession子類,並覆蓋invalidate()方法失效之前打印出來的堆棧跟蹤。

這將有助於確定會議的失效發生的,因爲東西Wicket或東西以外的Wicket