一 會話技術簡介
會話: 一次會話中包含多次請求和回應
一次會話: 客戶端第一次給服務器發送請求 會話建立 直到有一方斷開為止
功能: 在一次會話范圍內的多次請求間 共享資料
方式: 客戶端會話技術Cookie 服務端會話技術Session
二 Cookie
客戶端會話技術 將資料保存到客戶端
1. 快速入門
a. 創建Cookie 系結資料
new Cookie(String name, String value)
b. 發送Cookie
HttpServletResponse#addCookie(Cookie cookie)
c. 獲取Cookie 拿到資料
HttpServletRequest#getCookies() -> Cookie[]
2. 實作原理
基于回應頭Set-Cookie和請求頭Cookie實作

3. Cookie細節
a. 可以創建多個Cookie物件 使用response多次呼叫addCookie() 發送多個Cookie
b. 默認情況下 當客戶端關閉后 Cookie資料被銷毀 使用Cookie#setMaxAge(int expiry) 可以持久化存盤 expiry=負數是默認值 expiry=0是洗掉Cookie資訊 expiry=正數是存活時間(單位秒)
c. 在tomcat8之前 Cookie不支持中文資料 在tomcat8之后 Cookie支持中文資料 但是特殊字符還是不支持 所以建議都使用URL編碼存盤
d. Cookie共享問題
1> 在一個tomcat服務器中 部署了多個web專案 默認情況下Cookie不能共享 使用Cookie#setPath("/") 可以共享Cookie
2> 不同tomcat服務器間 默認情況下Cookie不能共享 使用Cookie#setDomain(".qq.com") 可以共享Cookie(一級域名必須相同)
4. Cookie特點
a. Cookie存盤資料在客戶端
b. 瀏覽器對于單個Cookie的大小有限制(4kb) 以及對同一個域名下的總Cookie數量也有限制(20個)
5. Cookie功能
a. Cookie一般用于存盤少量的不太敏感的資料
b. 在不登錄的情況下 完成服務器對客戶端的身份識別
三 Session
服務端會話技術 將資料保存到服務端
1. 快速入門
a. 獲取HttpSession
HttpServletRequest#getSession() -> HttpSession
b. 使用HttpSession
存盤資料 void setAttribute(String name, Object value)
通過鍵獲取值 Object getAttribute(String name)
通過鍵移除值 void removeAttribute(String name)
2. 實作原理
Session的實作依賴于Cookie

3. Session細節
a. 當客戶端關閉后 服務器不關閉 兩次獲取Session 默認情況下不是同一個 如果需要相同 可以創建Cookie("JSESSIONID", session.getId()) 設定最大存活時間 讓Cookie持久化保存
b. 當客戶端不關閉 服務器關閉后 兩次獲取Session 不是同一個 但是要確保資料不丟失 tomcat自動完成以下作業
1> Session鈍化: 在服務器正常關閉之前 將Session物件序列化到硬碟上
2> Session活化: 在服務器啟動后 將Session檔案轉化為記憶體中的Session物件
c. Session什么時候被銷毀
1> 服務器關閉
2> Session#invalidate()
3> Session默認失效時間是30分鐘 可以選擇性配置修改 在tomcat/conf/web.xml中 <session-config>節點下
4. Session特點
a. Session存盤資料在服務端
b. Session可以存盤任意型別 任意大小的資料
5. Session功能
a. 共享資料
域物件: 一個有作用范圍的物件 可以在范圍內共享資料
Session域: 代表一次會話的范圍
存盤資料 void setAttribute(String name, Object obj)
通過鍵獲取值 Object getAttribute(String name)
通過鍵移除值 void removeAttribute(String name)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/150229.html
標籤:Java
