2014-10-03 135 views
1

我有一個要求,其中用戶通過身份驗證進入會話,並且在非活動狀態10分鐘後,會話超時。一旦會話超時,現在過期的會話中的任何進一步請求都會重定向到超時頁面。我在這方面進行了研究,並採用了兩種不同的方法。使用web.xml和setMaxInactiveInterval設置會話超時之間的區別

方法1:

在web.xml中我已經提到下面的代碼...

<session-config> 
    <session-timeout>10</session-timeout> 
</session-config> 

方法2:

我有認證頁面內下面提到的代碼...

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
response.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
response.setDateHeader("Expires", 0); // Proxies. 
request.getSession().setMaxInactiveInterval(600); 

現在我的問題是這兩個approa的區別是什麼CHES?哪一個更好或推薦?並且,當使用方法#2時,如果最終用戶離開經過驗證的頁面導航但尚未註銷,則會話在閒置10分鐘後仍然超時?

回答

2

會話超時可以在各個層次上進行設置:

  • 應用服務器通常有默認設置,可以改變 - 這是所有應用程序的默認,或給定的應用(視在服務器配置功能上)。
  • 在應用
  • 然後描述 - 您可以通過使用web.xml覆蓋它 - 你把它用session.setMaxInactiveInterval(可以重寫 - 它會在給定的應用在應用程序代碼可用於所有會話
  • 然後),它將僅被覆蓋該會話

由於羅馬寫道,無論您如何設置它,超時到期時它將被容器無效。

您應該避免使用程序化方法(最後一個),因爲它很容易錯過某個會話並且會得到默認的超時時間,並且您的行爲會不一致。如果要確保給定超時(業務需求)並且不想依賴服務器功能,請使用web.xml。

+0

感謝羅馬和瓦斯解釋的差異,也給了我一個好主意,使用哪種方法。我仍在等待完整的業務需求,以確定整個應用程序的超時是否一致,這將明確說明使用哪種方法。但是,由於你們兩個都在向我解釋差異。現在,由於我不能將兩個答案都標記爲我的問題的答案,所以我將Gas的解決方案標記爲已接受的答案(沒有特別的理由),並對Roman的答案進行投票。再次感謝 – Sai 2014-10-03 19:01:25

2

第一種方法是在配置中爲所有會話使用靜態常量。第二種方法是動態的,您可以在運行時使用servlet API動態設置該值,並僅影響調用該方法的會話。一旦設置了該值,無論使用哪種方法,該容器都會使該會話無效。查看文檔中提到的內容HttpSession#setMaxInactiveInterval(int)

指定servlet容器使該會話失效之前,客戶端請求之間的時間(以秒爲單位)。

間隔值爲零或小於零表示會話永遠不會超時。

部署描述符web.xml中的值以分鐘爲單位,但setMaxInactiveInterval()方法接受「秒」中的值。

相關問題