會話技術


一 會話技術簡介

會話: 一次會話中包含多次請求和響應

一次會話: 客戶端第一次給服務器發送請求 會話建立 直到有一方斷開為止

功能: 在一次會話范圍內的多次請求間 共享數據

方式: 客戶端會話技術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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM