Java的會話技術Cookie和Session

一.什麼是會話技術?

HTTP協議本身是無狀態的。什麼是無狀態呢,即服務器無法判斷用戶身份。所以就有了客戶端的會話技術cookie,和服務端的會話技術Session,在一次會話的範圍內,共享數據。

二.什麼是Cookie?

Cookie實際上是一小段的文本信息(key-value格式)。客戶端向服務器發起請求,如果服務器需要記錄該用戶狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端瀏覽器會把Cookie保存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務器。服務器檢查該Cookie,以此來辨認用戶狀態。
所以Cookie是由服務器生成,在服務器的響應頭中,客戶端在請求頭以此作爲憑證作爲一次會話的狀態或者標記。

1 使用步驟

1).創建Cookie,綁定數據

		Cookie cookie=new Cookie(name, value);

2).發送Cookie對象

		response.addCookie(cookie);

3).獲取Cookie

	 request.getCookies();

2.Cookie的細節

1)一性是否可以發送多個Cookie?
答案當然是可以的。

2)Cookie的存活時間?
a.默認情況下,當瀏覽器關閉後,內存被釋放了,Cookie數據即被銷燬,
b.通過setMaxAge(in seconds),持久化到本地,當參數大於0,則將數據寫到硬盤上,參數默認是負數,也就是上面的情況,當參數等於0時,則是刪除Cookie信息

3)Cookie能不能用中文?
tomcat8之前是不能直接存放中文數據的,需要通過URL編解碼才能傳輸

4)Cookie的共享問題。
a.同一個服務器的不同項目,默認情況下,各項目間不能共享,如果設置共享通過setPath("/")來共享同一個服務器的所有項目。
b.不同的服務器同Cookie的共享問題,可以同過setDomain(String path),如果設置一級域名相同,那麼多個服務器之間的cookie可以共享,比如setDomain(“baidu.com”),這樣tieba.baidu.com和news.baidu.com可以共享。

3.Cookie的特點和作用

特點:
1)cookie存儲在客戶端瀏覽器
2)瀏覽器對於單個Cookie的大小是有限制(4kb)一級同一個域名下的總cookie數量也有限制(20個)

作用:
1)一般用於存儲少量不太敏感數據
2)在不登錄的情況下,完成服務器對客戶端做身份做識別

三.什麼是Session?

1.概念

服務器端的會話技術,在一次會話中多次請求間共享數據,將數據保存在服務器的對象中也就是HttpSession

2.Session的基本使用

1)獲取Session對象

	HttpSession session = request.getSession();
	session.getAttribute("msg");

2)使用Session對象

	session.setAttribute("msg", "ts");
	session.removeAttribute("msg");

3.服務器如何確保在一次會話中多次獲取的Session一致性?

session是依賴於cookie的,在第一次會話開啓的時候,是沒有session的,會在內存中創建一個session,在響應時會將創建的session的sessionId,放在cookie的頭,在下一次訪問時,將ssionid帶過來,在去內存中去找Session,所以才能保證唯一性。

4.Session的細節

1)客戶端關閉後,服務器不關,兩次獲取的Session是否爲一個?
默認情況下,是不一個,因爲一次會話已經結束了,如果希望一致的話,則通過Cookie設置JSESSIONID將id設置下去,這樣就可以爲一個了Cookie c=new Cookie(“JSESSIONID”,session.getId()),c.setMaxAge();

2)客戶端不關,服務器關閉,兩次獲取的Session是否爲一個?
默認情況下不是一個,但是要確保數據不丟失
session的持久化?session的反序列化?這些操作Tomcat服務器幫我們已經做過了。正常關閉後會在work中生成一個Session.zip,重啓後會重新反序列化,並刪除數據

3)Session的失效時間
session.invalidate();會將session刪除,默認時間是30分鐘,也可以在web.xml中添加session-config中配置

5.session的特點

1)session是用於存儲一次會話的多次請求的數據,存放在服務端

2)session可以是任意類型,任意大小的數據

四.Session和Cookie的區別

1.存放位置

Session是服務端,Cookie是在客戶端

2.數據大小

Cookie有大小限制,Session沒有

3.安全性

Session相對於Cookie安全,畢竟存在於服務器中。

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