http會話技術
阿新 • • 發佈:2020-08-13
會話技術
會話:一個會話中包含多次請求和響應。
一次會話:瀏覽器第一次給伺服器資源傳送請求、會話建立,直到一方斷開為止。
功能:在一次會話的範圍內的多次請求間,共享資料
方式:
- 客戶端會話技術:Cookie,資料儲存在客戶端
- 伺服器端會話技術:Session,資料儲存在伺服器
Cookie
快速入門
伺服器(Servlet)建立cookie物件,繫結資料
new Cookie(String name, String value)
;伺服器傳送cookie物件(瀏覽器自動儲存)
resp.addCookie(cookie)
瀏覽器第二次訪問伺服器時,伺服器會獲取cookie物件,拿到資料
Cookie[] req.getCookies()
。
cookie原理
cookie是存在請求頭和響應頭傳遞
cookie細節
- 一次 可不可以傳送多個cookie?
- 可以,多建立幾個cookie物件,新增就可以了。
- cookie在瀏覽器儲存多長時間?
- 預設情況下,瀏覽器關閉,cookie被銷燬。
- 持久化儲存:
cookie.setMaxAge(正數)
存到硬碟xx秒;cookie.setMaxAge(負數)
預設值;cookie.setMaxAge(0)
刪除cookie資訊。
- cookie能不能存中文?
- 在tomcat 8之前,不可以儲存中文。
- 在tomcat 8之後,可以儲存中文,但是不支援特殊字元,需要URL編碼:
- 編碼
str = URLEncoder.encode(str, "utf-8");
- 解碼
str = URLDecoder.decode(str, "utf-8");
- 編碼
- cookie資料共享範圍?
- 一個伺服器,部署多個web專案之間,預設不能共享
- 預設是設定
cookie.setPath("/當前虛擬路徑")
- 如果整個伺服器 共享,可以設定為 :
cookie.setPath("/")
cookie特點
- cookie儲存在客戶端
- 單個cookie的大小限制在4kb,並且同一個域名下的總的cookie數量也有限制。
- cookie一般儲存少量的不太敏感的資料
- 在不登入的情況下,完成伺服器對客戶端的身份識別。
Session
快速入門
儲存session
HttpSession session = req.getSession(); session.setAttribute("msg", "hello");
獲取session (另一個servlet檔案)
HttpSession session = req.getSession(); Object msg = session.getAttribute("msg"); System.out.println(msg);
session原理
session依賴cookie:
- 第一次建立session物件時;
- 伺服器會建立一個cookie,cookie指向session;(
JsessionID: xxx
) - 第二次訪問時,伺服器會根據cookie資訊,查詢到session物件。
session細節
當客戶端關閉後,伺服器不關閉,兩次獲取session是同一個嗎?
預設不是,如果需要,建立cookie,設定最大儲存時間:
HttpSession session = req.getSession(); Cookie c = new Cookie("JSESSIONID", session.getId()); c.setMaxAge(60*60); resp.addCookie(c);
當客戶端不關閉,伺服器關閉後,兩次獲取session是同一個嗎?
- 不是,因為建立了兩次物件,地址不一樣,但是tomcat自動完成以下工作:
- session的鈍化:在伺服器關閉前,將session物件儲存在硬碟上
- session的活化:在伺服器啟動後,將session檔案轉化為物件
- 不是,因為建立了兩次物件,地址不一樣,但是tomcat自動完成以下工作:
session什麼時候被銷燬?
- 伺服器關閉
- session物件呼叫invalidate()
- session預設失效時間 30分鐘
- 修改tomcat配置檔案
tomcat/conf/web.xml
所有專案的父配置檔案 - 修改
<session-timout>30</session-timeout>
- 也可以在專案的
web/WEB-INF/web.xml
修改
- 修改tomcat配置檔案
session特點
session特點:
- 用於儲存一次會話、多次請求的資料,儲存在伺服器
- 可以儲存任意大小的資料
session與cookie區別
- session儲存伺服器端,cookie儲存客戶端
- session資料安全,cookie相對不安全
- session沒有資料大小限制,cookie有資料大小限制