HTTP會話跟蹤

1.會話的基本慨念

(1).什麼是會話
在web應用中把客戶端瀏覽器開始請求web服務器,訪問不同web文檔進行請求/響應,到結束訪問的一系列過程稱爲會話。
一次會話可能包含對web服務器上多個文檔的多次請求,也可能包括對一個servlet的多次請求。

(2).會話跟蹤
web應用需要在用戶訪問的一個會話內,讓web服務器保存客戶的信息,如客戶的賬號或客戶的購物車,這稱爲會話跟蹤。在一個會話內,當客戶再次訪問時,服務器能夠定位是先前的同一客戶。

(3)JavaEE會話跟蹤方法
①.重寫URL
②.隱藏表單字段
③.Cookie
④.HttpSession對象API

2.URL重寫

(1).URL重寫的實現
通過請求URL地址後面附加參數來完成。

<a href="../product/main.do? userid="1001"&category=1">

以?name=value的形式附加在URL後,多個參數用&符號間隔。

取得參數的代碼:

String userid=request.getParamter("userid");

(2).URL重寫的缺點
①.使URL地址過長
②.不同瀏覽器對URL傳遞參數的限制不同
③.安全性缺陷
④.編程複雜

3.隱藏域表單

(1).隱藏域表單的實現
將會話數據放置在隱藏域文本域元素中,隨着表單的提交而發送到Web服務器,服務器Web組件使用請求對象的方法獲取。

<form action="../product/main.do" method="post" >
    <input type="hidden" name="userid" value="${userid}" />
    <input type="submit" value="提交" />
 </form>

(2).隱藏域的缺點
①.安全性差
②.編程複雜
③.無法使用超鏈接

4.Cookie

(1).什麼是Cookie
Cookie是Web服務器保存在客戶端的小的文本文件,存儲許多name/value對,可以在這些name/value對中保存會話數據。

(2).Cookie API

①.Cookie對象的創建

Cookie cookie01=new Cookie("userid","1001");

②.取得Cookie對象的名稱

String name=cookie01.getName();

③.取得Cookie對象中的值

String userid=cookie01.getValue();

④.Cookie對象在客戶端保存的有效期限,以秒爲單位

int times=cookie01.getMaxAge();

⑤.取得Cookie對象的有效路徑

String path=cookie01.getPath();

⑥.取得Cookie對象的使用版本

int version=cookie01.getVersion();

⑦.取得Cookie對象的有效域

String domain=cookie01.getDomain();

⑧. 設置Cookie對象的新值,取代舊值

cookie.setValue("1002");

⑨.設置Cookie對象新的有效期和有效目錄

(3).將Cookie保存到客戶端

①.創建Cookie對象

String userid=request.getParameter("userid");
Cookie cookie=new Cookie("userid","userid");

②.設置Cookie屬性

cookie.setMaxAge("7*24*60*60");

③.發送Cookie到客戶端

response.addCookie(cookie);

(4).Cookie的缺點
①.Cookie只能保存S聽類型的鍵值對,無法保存一般表達業務對象的JavaBean類型對象
②.存儲位置限制
③Cookie大小受瀏覽器限制
④Cookie可用性限制
⑤安全性缺陷

5.HttpSession對象

(1).JavaEE會話對象
JavaEE規範中爲克服以上會話跟蹤方法的缺點,提出了一個服務器端實現會話跟蹤的機制,即HttpSession接口,實現該接口的對象稱爲Session對象。Session對象保存在Web服務器上,每次會話過程創建一個,爲用戶保存各自的會話信息提供全面的支持。

(2).會話對象的類型與獲取
JavaEE會話對象的類型是接口javax.servlet.http.HttpSession
獲取的方法有兩種,一種無參,一種有參。

HttpSession session=request.getSession();

如果Web瀏覽器內沒有此客戶的會話對象,則Web容器會創建新的會話對象並返回;如果已存在會話對象,則直接返回此對象的引用。

HttpSession session=request.getSession(false);

如果參數爲true,與無參的getSession方法相同,有會話對象直接引用,無會話對象則先創建再返回;如果參數爲false,存在會話對象則直接返回對象引用,無會話對象則返回null,Web容器不會自動創建會話對象。

(3).會話對象的功能與方法

①.將數據存入會話對象

HttpSession session=request.getSession();
session.setAttribute("userid","mirror6");

②.取出保存在會話中指定名稱屬性的對象

String userid=session.getAtrribute("userid");

③.移除保存在會話中指定名稱屬性的對象

session.removeAttribute("userid");

④.取得會話對象中保存的所有屬性名稱列表

Enumeration enum=session.getAttributeNames();
while(enum.hasMoreElements()){
    String name=(String)enum.nextElement();
    out.println(name);
}

⑤.設置會話的失效期限,以秒爲單位

session.setMaxInactiveInterval(12*60*60);

⑥.取得會話的有效間隔

int time=session.getMaxInactiveInterval();

⑦.立即迫使會話對象失效

session.invalidate();

⑧.測試會話對象是否剛剛建好

boolean b=session.isNew();

⑨.取得會話對象的ID

session.getId();

(4).會話對象的生命週期
①.創建
首次訪問Servlet/JSP時,Web容器會創建會話對象
②.活動
在一個會話有效期內的所有請求,將共享一個會話對象
③.銷燬
客戶端瀏覽器關閉的時候或執行invalidate方法

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