Web應用程序狀態管理

狀態管理概述
Cookie
Session
URL重寫
 
狀態管理概述:
HTTP協議使用的是無狀態的連接
對容器而言,每一個請求都來自於一個新的客戶
這裏我們有四種方法來解決這個狀態:
a:表單隱藏字段
b:Cookie
c:  Session
d:  URL重寫
 
我們就來一一介紹這四種方案:
A:狀態管理解決方案-表單隱藏字段
   表單隱藏字段:
<input type="hidden" name="session"  value=""/>

1:對用戶在網站上的訪問進行會話跟蹤。

2:爲服務器端程序提供預定義的輸入。

3:存儲動態產生的頁面上下文信息。  

隱藏字段存在一個主要的缺點,即只有每當每個頁面都是動態生成的時候纔有效。

 

 

B:表單是在生成動態時纔有效,那麼我們就使用HTTP Cookie來固定的保存在某個地方,需要是讀取。

 

使用HTTP Cookie可以很好的維護和保留用戶的狀態信息,但是Cookie涉及到一些敏感的隱私問題,一些用戶會禁用Cookie,這時我們需要另一個方法來解決

 

C:URL重寫

 

D:Servlet提供了出色的解決方案,HttpSessionAPI,這種高級接口建立在Cookie和URL重寫之上。

把客戶的狀態信息保存在服務器端

Session對象就是服務器爲客戶端創建並維護的用於存放客戶狀態數據的對象 

 

一:Cookie

1:Cookie原理:

服務器在響應請求時將一些數據以“鍵-值”對的形式通過響應信息保存在客戶端,當瀏覽器再次訪問相同的應用時,會將原先的Cookie通過請求信息帶到服務器端。

Cookie cookie = new Cookie("cool", "tiger!");

response.addCookie(cookie); 

2:在Serlvet中管理Cookie

Servlet中提供瞭如下一系列操作Cookie的API
–Cookie(name, value):構造方法用於創建一個或多個Cookie
–setMaxAge(int lifetime):設置Cookie的過期時間(以秒爲單位)。默認值爲負值(Cookie將在瀏覽器關閉時過期)
–getMaxAge():獲取Cookie的過期時間。
–getName():獲取Cookie的名字
–setValue(String value):指定Cookie的值。
–getValue():獲取Cookie的值
-.......
 
3:在Servlet中使用Cookie
要將Cookie發送到客戶端,Servlet應該按照下列的操作步驟執行:
–創建一個或多個Cookie,使用構造方法指定Cookie的名字和值
–使用setXXX方法爲Cookie設置屬性值
–使用HttpServletResponse對象的addCookie()方法將Cookie插入到響應頭中
要讀取客戶端傳入的Cookie,Servlet執行下列操作步驟:
–使用HttpServletRequest對象的getCookie方法返回一個Cookie對象數組
–Servlet遍歷該數組(調用getName()方法),直到找到與名稱相匹配的Cookie值
 
 
 
二:Session
1:Session原理
-服務器可以爲客戶端創建並維護一個Session對象,用於存放數據。
-在創建Session對象的同時,服務器將會爲該 Session對象產生一個唯一編號,這個編號稱之爲SessionID
-服務器以Cookie的方式將SessionID存放在客戶端。
-當瀏覽器再次訪問該服務器時,會將SessionID作爲Cookie信息帶到服務器,服務器可以通過該SessionID檢索到以前的Session對象,並對其進行訪問
 
2:Session工作流程
 
3:Session會話跟蹤機制
 
用戶發送請求

HttpSession session = request.getSession(); //getSession(false)方法使用已經存在的會話,而不必創建新會話

服務器的響應
再次發送請求
4:HttpSessoin接口
HttpSession接口常用的一些方法
–setAttribute(java.lang.String, java.lang.Object):在Session對象中用一個名字綁定一個對象。
–getAttribute(java.lang.String):通過名字獲取Session對象中保存的對象。
–removeAttribute(java.lang.String):在Session中刪除與一個名字對應的對象。
–getCreationTime():返回第一次創建會話的時間。
–getLastAccessedTime():返回容器最後一次得到該會話ID的請求時間。
–setMaxInactiveInterval(int interval):對於會話指定客戶請求的最大間隔時間,以秒爲單位。-1表示永不過期
–getMaxInactiveInterval(int interval):返回客戶請求的最大間隔時間。
–invalidate():會話結束,當前存在在會話中的所有會話屬性也會解除綁定。
–getId():此方法返回每個session唯一的標識 
-......
5:會話超時管理
銷燬會話可以採用如下三種簡單的方式           //瀏覽器關閉時並不意味着Session對象被刪除
–設置會話超時。
–在Session對象上調用invalidate()方法。
–應用結束(崩潰或取消部署)
在web.xml文件中配置    //以分鐘爲單位

<session-config>

       <session-timeout>15</session-timeout>

  </session-config> 

 6:Session持久化管理

三:URL重寫

Session對象的正常使用要依賴於Cookie
URL地址重寫能夠取得置於Cookie中的會話,並把會話ID附加到訪問應用的各個URL最後

URL重寫方法:

response.encodeURL()

response.encodeRedirectURL(“/lovobook/sucess.html” )

URL重寫是容器自動完成的,但需要我們對URL進行編碼纔有效 

總結:

1 HTTP協議使用的是無狀態的連接,連接只針對一個請求/響應
2 狀態管理方案:表單隱藏字段、Cookie、Session、URL重寫
3 Cookie是Web服務器發送到客戶端瀏覽器並保存的簡短文本信息
4 Session對象就是服務器爲客戶端創建並維護的用於存放客戶狀態數據的對象
5 用戶會禁用Cookie。這時我們可以使用URL地址重寫來解決
6 通過HttpServletResponse的addCookie方法將該Cookie信息添加到響應信息中
7 Session對象是某個Servlet調用HttpServletRequest.getSession()這樣的語句時才被創建
8 Session對象是保存在服務器端,瀏覽器關閉時並不意味着Session對象被刪除
9 Session只認SessionID不認人
10 應當儘量使用維護時間短的域對象
11 在向客戶返回第一個響應時,會同時嘗試設置Cookie和URL重寫兩種做法 

 

 

 

 

 

 

 

 

 
 
每件事都需要堅持!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章