2011-10-25 65 views
3

我在Tomcat 6中使用了HttpSession。我部署了我的Web應用程序的第一個Tomcat 6實例具有我期望的Tomcat會話行爲(我設置了一個maxInactiveInteval我的會議到30分鐘)。Tomcat 6:最大會話空閒時間不同實例

更新:我添加更多的代碼下面來證明我究竟是如何設置上的會話超時

這是我第一次安裝了會議:

session = request.getSession(true); 
session.setAttribute(USER_CREDENTIALS, new Credentials(username, password)); 
session.setMaxInactiveInterval(60*30); 

然後我有一個攔截器來檢查這個會話:

HttpSession session = request.getSession(true); 
Credentials cred = (Credentials) session.getAttribute(AuthController.USER_CREDENTIALS); 

似乎在我使用的Tomcat實例中正常工作,但在Tomcat 6的另一個實例中,在負載平衡環境中,maxInactiveInteval似乎不受尊重。

更新:我的意思是,如果用戶是大約十秒鐘不活動(沒有新的請求)的用戶會話過期。

在代碼中沒有其他地方設置了maxInactiveInteval。什麼可能導致這種行爲?

+4

你的問題很混亂。 'setMaxInactiveInterval()'不會做你認爲它做的事。它基本上與''完全相同,只是它允許在每個會話基礎上進行更改,因此您在那裏設置完全相同值的那一行是完全多餘的。你看到並正在努力解決的問題究竟是什麼? – BalusC

+0

@BalusC指出,我認爲是會話過期前的幾分鐘時間,但它顯示的是會話允許在請求之間空閒的時間,然後纔會失效。 – stevebot

+1

是的,這是正確的。我看到你已經編輯了你的問題來消除這種困惑。但我仍然不明白你的具體問題。什麼*確切*你的意思是「似乎沒有被尊重」?你何時/在哪裏設置這個值,以及會發生什麼? – BalusC

回答

2

根據對問題的評論,您的具體問題是負載均衡的Tomcat實例幾乎立即過期。設置/更改<session-timeout>setMaxInactiveInterval()根本沒有任何幫助。

您首先需要通過使用Firebug和/或Fiddler跟蹤cookie流量來排除客戶端的嫌疑。如果cookie流量看起來很好(即客戶端會在所有後續請求上返回適當的會話cookie),那麼負載均衡器或Tomcat配置就會中斷。這不是編程錯誤,而是服務器管理員的食物。