session超時時間的設定

ZHOU_VIP發表於2017-10-25

在Java Web開發中,Session為我們提供了很多方便,Session是由瀏覽器和伺服器之間維護的。Session超時理解為:瀏覽器和伺服器之間建立了一個Session,由於客戶端長時間(休眠時間)沒有與伺服器互動,伺服器將此Session銷燬,客戶端再一次與伺服器互動時之前的Session就不存在了。

 

設定Session超時時間方式:

方式一:
 在web.xml中設定session-config如下:
 <session-config>
  <session-timeout>2</session-timeout>
 </session-config>
 
 即客戶端連續兩次與伺服器互動間隔時間最長為2分鐘,2分鐘後session.getAttribute()獲取的值為空
 
 API資訊:
  session.getCreationTime()   獲取session的建立時間
  session.getLastAccessedTime()  獲取上次與伺服器互動時間
  session.getMaxInactiveInterval() 獲取session最大的不活動的間隔時間,以秒為單位120秒。
  
方式二:
 在Tomcat的/conf/web.xml中session-config,預設值為:30分鐘
 <session-config>
        <session-timeout>30</session-timeout>
 </session-config>
 
方式三:
 在Servlet中設定
  HttpSession session = request.getSession();
  session.setMaxInactiveInterval(60);//單位為秒

說明:
 1.優先順序:Servlet中API設定 > 程式/web.xml設定 > Tomcat/conf/web.xml設定
 2.若訪問伺服器session超時(本次訪問與上次訪問時間間隔大於session最大的不活動的間隔時間)了,即上次會話結束,但伺服器與客戶端會產生一個新的會話,之前的session裡的屬性值全部丟失,產生新的sesssionId
 3.客戶端與伺服器一次有效會話(session沒有超時),每次訪問sessionId相同,若程式碼中設定了session.setMaxInactiveInterval()值,那麼這個session的最大不活動間隔時間將被修改,並被應用為新值。
 4.Session的銷燬(代表會話週期的結束):在某個請求週期內呼叫了Session.invalidate()方法,此請求週期結束後,session被銷燬;或者是session超時後自動銷燬;或者客戶端關掉瀏覽器
 5.對於JSP,如果指定了<%@ page session="false"%>,則在JSP中無法直接訪問內建的session變數,同時也不會主動建立session,因為此時JSP未自動執行request.getSession()操作獲取session。

 

總結:

       在程式開發過程中,我們可以在客戶端每次與伺服器互動時檢查SessionID(Session中屬性值,非HttpServlet環境開發中也可以用其它的Key值代替),用於會話管理。



相關文章