2009-04-20 79 views
5

我在Tomcat中運行J2EE Web應用程序,最近我的任務是嚮應用程序添加度量標準。我使用SessionListener來檢測會話何時被銷燬,然後將度量上傳到數據庫。我的會話超時在我的web.xml中設置爲30分鐘,並且我沒有在任何地方以編程方式使會話無效。通常在我登錄進行測試的5-10分鐘內,我會看到3或4組指標上傳到數據庫,所有指標都有不同的會話ID。隨機會話無效

除了web.xml和session.invalidate(),還有什麼會導致Tomcat中的會話被銷燬?例外? Tomcat會隨機使會話失效嗎?

+0

你使用永久會話嗎? – trunkc 2009-04-20 21:05:20

回答

4

可能您的瀏覽器已決定不會將請求中的會話cookie發送到Web應用程序,在那裏您的應用程序會預期發送一個。 我已經看到這發生在一個Apache重寫規則; session-cookie路徑之外的URL被重定向到web應用程序。有什麼樣的如下因素髮生(細節可能是錯誤的):

  • 我的web應用程序位於/應用/
  • 因此會話cookie被綁定到該路徑/應用/
  • 一個頁面中web應用程序提到/img/magic.jpeg
  • 瀏覽器沒有發送會話cookie請求這個圖像(路徑不匹配)
  • 服務器重定向請求(內部)到/ app/createImage?magic
  • web應用程序沒有收到會話cookie,因此它創建了一個新會話

如果您記錄新會話的初始URL,您應該能夠看到這是否會導致您的問題。

0

這可能不是您的服務器上正在發生的事情,但是如果系統時間在服務器上設置爲前向,則會導致會話過期時間超過30分鐘的「已用時間」。 Tomcat - 至少5.5版本 - 使用「時鐘時間」使會話過期,因此更改系統時鐘將影響會話生存期。