2013-03-21 59 views
1

我在web.xml中設置了<會話超時>爲30分鐘。如果我沒有錯,這個人應該只在會話不活動時在30分鐘內註銷會話。但在我的應用程序中,用戶在30分鐘內註銷,而不考慮活動。任何人都可以請幫助我嗎?我不是問題所在。會話在30分鐘內註銷,與活動無關

+2

你在web.xml中設置了30分鐘的內容?如果您將會話生存期設置爲30分鐘,則應該是30分鐘的不活動時間,而不是30分鐘的時間(應每刷新一次服務器的請求刷新cookie過期時間)。在幾次頁面瀏覽之後,嘗試檢查瀏覽器中的cookie過期時間,並查看該頁面瀏覽是30分鐘還是首頁瀏覽30分鐘。 – Adrian 2013-03-21 15:37:09

+0

我想所有的活動都會發生在會話之外。可能cookie不會與其他活動或類似的東西一起發送。 – AlexR 2013-03-21 15:44:18

+0

謝謝你的回覆。對不起,html文本丟失了。會話超時設置爲30分鐘。好的,我會嘗試cookie到期時間並查看。 – user2195797 2013-03-21 15:47:39

回答

0

檢查您是否沒有收到每個請求的新會話。一個簡單的方法是在會話中存儲一個Integer,並在每次請求時增加它。然後將整數的值(作爲整數或字符串)添加到響應中,並將其顯示在頁面上(如果需要,可將其添加到頁面中作爲隱藏字段)。

+0

我認爲每次請求獲得新會話都將非常明顯 - 可以證明30分鐘後會話過期更爲明顯(假設用戶可能在30分鐘內停止使用)。 – 2013-03-21 16:38:09

0

可能有很多原因可能會導致意外的會話超時,沒有進一步的信息,我只能提供一些指針和建議。

  1. 你使用集羣嗎?如果你這樣做,請檢查你的負載均衡器的算法和設置。 30分鐘後用戶請求是否轉發到集羣中的其他服務器?你的集羣中配置了會話複製嗎?確保負載平衡器不是罪魁禍首的另一個簡單方法是關閉羣集中除一個之外的所有其他服務器。因此請求被保證發送到同一臺服務器。然後你可以檢查30分鐘超時是否仍然發生,而不管用戶活動。服務器訪問日誌也可以幫助您查看用戶是否在服務器之間被退回。
  2. 如果您安裝了諸如ieHTTPHeaders的瀏覽器插件,請檢查每個請求發送的會話cookie並查看是否有任何更改。
  3. 另一個問題是,如果將web.xml中的30分鐘超時更改爲15分鐘,則用戶每15分鐘超時一次,而不考慮用戶活動?