我們遇到突然註銷的問題。它帶有一個版本切換器,以前的應用程序運行JSF 1.2,而這個版本運行JSF 2.1。由於這是一次重大的重構,因此任何特定的代碼更改都無法跟蹤。但是對代碼進行了重大更新(儘管大部分都是視圖而不是豆類)。Tomcat/Java EE:會話意外停止
我們控制了每一個地方,我們無效的會話,他們被記錄,而不是原因。
我們使用會話bean進行身份驗證,它實現HttpSessionBindingListener
。
我們記錄了valueUnbound,並可以看出註銷是由會話的生命週期結束引起的。我們正在努力尋找原因。
Tomcat 6.0.26已被配置文件,一切似乎正常。對於負載很小的小客戶也會出現這種情況。
<session-timeout>
適當設置爲30分鐘。
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
不確定這有什麼影響,但他們都使用客戶端。
我們嘗試繞過負載平衡,但問題仍然存在。
How could randomly my session is null?
我們嘗試了建議的標誌,emptySessionPath但它沒有幫助。
此外,我們不確定如何繼續按照建議記錄請求標頭。
在我們的應用程序,我試圖殺死會話cookie的用於調試的原因:
HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
Map<String, Object> cookies = getFacesContext().getExternalContext().getRequestCookieMap();
Cookie cookie = (Cookie) cookies.get("JSESSIONID");
cookie.setValue("");
cookie.setPath("/");
cookie.setMaxAge(0);
response.addCookie(cookie);
好像它要麼不被破壞或重新創建。我也嘗試在登錄時刪除瀏覽器中的Cookie,但仍然沒有問題。
想了解一些關於如何進一步調試的具體提示嗎?現在基本上所有我們知道的是價值突然被忽略。
的Tomcat 6.0.26
JSF 2.1.10
乾杯
會話超時是否存在某種模式?它們是在一段時間後發生還是隨機發生?此外,這是否發生**所有**客戶或只是一些?因爲沒有啓用cookie的客戶端的會話處理會失敗,並且您沒有進行任何URL重寫。你是否也使用tomcat來將你的會話保存到persisten存儲中?檢查tomcat日誌是否存在持久性失敗 – kolossus
完全隨機。有時3小時後,有時3次點擊後。許多不同的用戶甚至不同的操作系統和瀏覽器。 URL重寫 - 無。 Tomcat日誌已經被非常仔細地研究過了,我甚至不認爲我們會堅持下去。 –
這只是一個實驗。你能否實現一個JSF'PhaseListener'和'HttpSessionListener',並在兩者中收集足夠的環境統計信息,目標是可以確定Web應用程序請求處理生命週期和會話創建與銷燬之間的某種模式。 – kolossus