1. 程式人生 > >HTTP會話跟蹤

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方法