2012-10-29 131 views
0

我們遇到突然註銷的問題。它帶有一個版本切換器,以前的應用程序運行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

乾杯

+0

會話超時是否存在某種模式?它們是在一段時間後發生還是隨機發生?此外,這是否發生**所有**客戶或只是一些?因爲沒有啓用cookie的客戶端的會話處理會失敗,並且您沒有進行任何URL重寫。你是否也使用tomcat來將你的會話保存到persisten存儲中?檢查tomcat日誌是否存在持久性失敗 – kolossus

+0

完全隨機。有時3小時後,有時3次點擊後。許多不同的用戶甚至不同的操作系統和瀏覽器。 URL重寫 - 無。 Tomcat日誌已經被非常仔細地研究過了,我甚至不認爲我們會堅持下去。 –

+0

這只是一個實驗。你能否實現一個JSF'PhaseListener'和'HttpSessionListener',並在兩者中收集足夠的環境統計信息,目標是可以確定Web應用程序請求處理生命週期和會話創建與銷燬之間的某種模式。 – kolossus

回答

1

後,一切都足夠令人尷尬的一個過濾器。我想這就是當每個人都假設其他人檢查了某些東西時會發生什麼