維持客戶端狀態

許多應用都須要一個客戶端的多個請求是相互關聯。例如,一個web程序能在多個請求間保存用戶的狀態。基於web的應用程序都有維護這些狀態的能力,由於HTTP是無狀態的。爲了支持這些,web應用程序須要維護狀態,servlet技術提供了管理session的api,而且有幾種實現會話的機制。java

訪問一個session

session表明一個HttpSession對象。你能夠經過請求的getSession方法訪問session。這個方法返回關聯到當前請求的session對象,或者,若是當前請求尚未session,這個方法會生成一個。web

session關聯的對象

你能夠經過名稱關聯對象-值屬性到session。這些屬性能夠被同一個web上下文處理同一個session的請求訪問。
注意,你的應用程序能夠通知web上下文和servlet生命週期(Handling Servlet Lifecycle Events)中的session監聽器。 您還能夠通知與會話關聯的某些事件的對象,例如如下內容:api

  • 當往session中添加或移除一個對象。爲了接收通知,你的對象必須實現javax.servlet.http.HttpSessionBindingListener接口。
  • 當附加對象的session被休眠或激活。在虛擬機之間移動或保存到永久存儲並從中恢復時,會話將被鈍化或激活。爲了接收通知,你的對象必須實現javax.servlet.http.HttpSessionActivationListener 接口。

session管理

由於HTTP客戶端沒有方法去標記是否再也不須要一個session。每個session都關聯了一個超時時間,以便於資源的回收利用。這個超時階段能夠經過session的getMaxInactiveInterval 和setMaxInactiveInterval方法訪問。服務器

  • 爲了確保活躍的session不被設置爲超時, 您應該使用服務方法按期訪問會話,由於這會重置會話的生存時間計數器。
  • 當與一個特定客戶端交互完成後,你能夠在服務端使用invalidate方法設置一個session無效、刪除任何session數據。

使用netbeans 設置超時時間

要使用NetBeans集成開發環境在部署描述符中設置超時時間,請按照下列步驟操做。cookie

  1. 打開項目若是你還未打開
  2. 展開你的項目Projects節點
  3. 展開項目節點下的Web Pages and WEB-INF節點
  4. 雙擊web.xml
  5. 在編輯器頂端點擊General按鈕
  6. 在Session Timeout屬性中,鍵入數字
    整數值表示在會話超時以前必須通過的不活動分鐘數。

session跟蹤

要將session與用戶關聯,web容器有幾種方法,它們都須要在客戶端與服務器直接傳一個惟一標識。這個惟一標識在客戶端做爲一個cookie維護,或者web組件在返回客戶端的每個響應中包含這個惟一標識。
若是你的應用使用了session對象, 您必須確保在客戶端關閉cookie時讓應用程序重寫URL,從而啓用會話跟蹤。你能夠經過調用全部servlet的響應的encodeURL方法來實現。只有當cookie無效時,這個方法纔在url中包含惟一標識;從另外一個角度講,這個方法返回的url不會改變。session

相關文章
相關標籤/搜索