2013-06-28 74 views
0

我有一個使用HTTP會話跟蹤用戶狀態的Web應用程序。我試圖調試一個錯誤,我必須將會話超時設置爲2分鐘。我修改了web.xml - >會話超時爲2.通過向自定義HTTP會話偵聽器添加日誌語句,我可以看到會話在2分鐘後創建並銷燬,當我沒有登錄到應用程序時。登錄後,會話在創建後大約20分鐘後被銷燬。我也嘗試關閉瀏覽器以避免任何延長會話生命期的AJAX調用,但我仍然看到相同的行爲。它看起來應用程序中的其他內容正在延長會話生命週期,可能原因是什麼?從哪裏開始尋找解決這個問題?Web應用程序中HttpSession的奇怪行爲

+1

看看他的答案和來源。 http://stackoverflow.com/questions/3118968/sessiontimeout-web-xml-vs-session-maxinactiveinterval –

回答

0

確認您的登錄servlet,目標jsp或任何會話偵聽器不會以編程方式覆蓋web.xml中設置的會話超時值。在您的代碼庫中搜索setMaxInactiveInterval。在你的代碼

session.setMaxInactiveInterval(20*60); // seconds 
0

首先請確保您已設置會話時間編程,可取代XML值,當你登錄。代碼

打印getMaxInactiveInterval()結束。如果它不是你在web.xml中設置的,那意味着它在別的地方改變了。

檢查代碼中的setMaxInactiveInterval(int interval)。

HttpSession一直存在,直到它還沒有被使用超過一段時間,您可以在web.xml中指定一個默認值爲30分鐘的設置。因此,當客戶端不再訪問webapp超過30分鐘時,servletcontainer將垃圾會話。每一個後續的請求,即使指定了cookie,也不會再訪問同一個會話。 servletcontainer將創建一個新的。

檢查會議api更多細節

0

如果20分鐘的不是一個精確的估計: 你使用request.getSession();request.getSession(true);隨時隨地獲取會話? 如果是的話,那可能是一個原因。

而爲了避免它request.getSession(false);可以幫助你阻止延長會話的生命時間。

「約20分鐘」的近似值可能與業務邏輯請求的生命週期有關,其中會話打開到db或某些其他處理。

正如其他答案中所建議的那樣,"setMaxInterval();"可能是奇數「20分鐘」現象的原因。