目錄
一.什麼是會話技術?
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安全,畢竟存在於服務器中。