1. 程式人生 > >session和cookie技術對比

session和cookie技術對比

正整數 setvalue 註意 如果 tac 類型 技術 同名 銷毀

Cooke技術

1 特點

Cookie技術:會話數據保存在瀏覽器客戶端。

2 Cookie技術核心

Cookie類:用於存儲會話數據

1)構造Cookie對象

Cookie(java.lang.String name, java.lang.String value)

2)設置cookie

void setPath(java.lang.String uri) :設置cookie的有效訪問路徑

void setMaxAge(int expiry) : 設置cookie的有效時間

void setValue(java.lang.String newValue) :設置cookie的值

3)發送cookie到瀏覽器端保存

void response.addCookie(Cookie cookie) : 發送cookie

4)服務器接收cookie

Cookie[] request.getCookies() : 接收cookie

3 Cookie原理

1)服務器創建cookie對象,把會話數據存儲到cookie對象中。

new Cookie("name","value");

2) 服務器發送cookie信息到瀏覽器

response.addCookie(cookie);

舉例: set-cookie: name=eric (隱藏發送了一個set-cookie名稱的響應頭)

3)瀏覽器得到服務器發送的cookie,然後保存在瀏覽器端。

4)瀏覽器在下次訪問服務器時,會帶著cookie信息

舉例: cookie: name=eric (隱藏帶著一個叫cookie名稱的請求頭)

5)服務器接收到瀏覽器帶來的cookie信息

request.getCookies();

4 Cookie的細節

1)void setPath(java.lang.String uri) :設置cookie的有效訪問路徑。有效路徑指的是cookie的有效路徑保存在哪裏,那麽瀏覽器在有效路徑下訪問服務器時就會帶著cookie信息,否則不帶cookie信息。

2)void setMaxAge(int expiry) : 設置cookie的有效時間。

正整數:表示cookie數據保存瀏覽器的緩存目錄(硬盤中),數值表示保存的時間。

負整數:表示cookie數據保存瀏覽器的內存中。瀏覽器關閉cookie就丟失了!!

零:表示刪除同名的cookie數據

3)Cookie數據類型只能保存非中文字符串類型的。可以保存多個cookie,但是瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB。

Session技術

1 引入

Cookie的局限:

1)Cookie只能存字符串類型。不能保存對象

2)只能存非中文。

3)1個Cookie的容量不超過4KB。

如果要保存非字符串,超過4kb內容,只能使用session技術!!!

Session特點:

會話數據保存在服務器端。(內存中)

2 Session技術核心

HttpSession類:用於保存會話數據

1)創建或得到session對象

HttpSession getSession()

HttpSession getSession(boolean create)

2)設置session對象

void setMaxInactiveInterval(int interval) : 設置session的有效時間

void invalidate() : 銷毀session對象

java.lang.String getId() : 得到session編號

3)保存會話數據到session對象

void setAttribute(java.lang.String name, java.lang.Object value) : 保存數據

java.lang.Object getAttribute(java.lang.String name) : 獲取數據

void removeAttribute(java.lang.String name) : 清除數據

3 Session原理

服務器能夠識別不同的瀏覽者!!!

代碼解讀:HttpSession session = request.getSession();

1)第一次訪問創建session對象,給session對象分配一個唯一的ID,叫JSESSIONID

2)把JSESSIONID作為Cookie的值發送給瀏覽器保存

3)第二次訪問的時候,瀏覽器帶著JSESSIONID的cookie訪問服務器

4)服務器得到JSESSIONID,在服務器的內存中搜索是否存放對應編號的session對象。

5)如果找到對應編號的session對象,直接返回該對象

6)如果找不到對應編號的session對象,創建新的session對象,繼續走1的流程

結論:通過JSESSION的cookie值在服務器找session對象!!!!!

4 Sesson細節

1)java.lang.String getId() : 得到session編號

2)兩個getSession方法:

getSession(true) / getSession() : 創建或得到session對象。沒有匹配的session編號,自動創 建新的session對象。

getSession(false): 得到session對象。沒有匹配的session編號,返回null

3)void setMaxInactiveInterval(int interval) : 設置session的有效時間

session對象銷毀時間:

3.1 默認情況30分服務器自動回收

3.2 修改session回收時間

3.3 全局修改session有效時間

<!-- 修改session全局有效時間:分鐘 -->

<session-config>

<session-timeout>1</session-timeout>

</session-config>

3.4.手動銷毀session對象

void invalidate() : 銷毀session對象

4)如何避免瀏覽器的JSESSIONID的cookie隨著瀏覽器關閉而丟失的問題

/**

* 手動發送一個硬盤保存的cookie給瀏覽器

*/

Cookie c = new Cookie("JSESSIONID",session.getId());

c.setMaxAge(60*60);

response.addCookie(c);

總結:

1)會話管理: 管理瀏覽器和服務器之間的會話過程中產生的會話數據

2)Cookie技術: 會話數據保存在瀏覽器客戶端。

Cookie核心的API:

2.1 在服務器端創建Cookie對象

Cookeie cookie = new Cookie("name","value");

2.2 把cookie發送給瀏覽器端(通過響應頭:set-cookie)

response.addCookie(cookie);

2.3 瀏覽器帶著cookie信息訪問服務器(通過請求頭:cookie),服務器得到cookie信息

Cookie[] cookies = request.getCookies();

局限:

1)只能保存字符串類型,不能保存中文

2)一個cookie不能超過4kb

3)Session技術:會話數據保存在服務器端。(內存)

Session核心的API:

3.1 創建或得到session對象

HttpSession session = request.getSession(); //創建或得到session對象

request.getSession(false); //得到session對象

3.2 會話數據保存session對象中,和得到會話數據

session.setAttribute("name",Object); 保存數據

session.getAttribute("name") 得到數據

註意:

1)session.setIntactiveInterval(時間); 設置session過期時間

2)session.invalidate() 手動銷毀session對象

session和cookie技術對比