文章目錄
- 會話
-
- 一、 會話技術的概述
- 二、會話技術的實作原理
-
- 1. 會話技術的分類
- 2. 會話技術的實作原理
- 3. 記錄使用者上次通路時間
- Cookie
-
- 一、Cookie 的分類
- 二、Cookie 的 API 的概述
-
- 1. Cookie 的使用步驟
- 2. 實作原理
- 3. Cookie 在浏覽器中的儲存時間
- 4. Cookie 共享問題
- 5. 構造方法
- 6. 其他方法
- 三、Cookie 的使用細節
- Session
-
- 一、Session 的概述
-
- 1. Session 是什麼
- 2. 為什麼有 Cookie 還要有 Session
- 3. Session 如何儲存使用者資料
- 二、Session 的原理
- 三、Session 作為域對象存取資料
-
- 1. Session 作為域對象的 API
- 2. Session 作為域對象的作用範圍
- Servlet 的資料通路範圍的總結(Servlet 的域對象的總結)
會話
一、 會話技術的概述
- 使用者打開一個浏覽器,點選多個超連結通路伺服器的 web 資源,然後關閉浏覽器,整個過程稱為是一次會話;
- 使用會話技術的原因:每個使用者與伺服器互動,都會産生各自的資料;程式想将這些資料進行儲存,就要使用會話技術;
二、會話技術的實作原理
1. 會話技術的分類
-
Cookie 技術
是用戶端技術,程式把每個使用者的資料以 cookie 的形式儲存到各自的浏覽器中;當使用者使用浏覽器再次通路伺服器中的 web 資源時,就會帶着各自的資料過去;
-
Session 技術
是伺服器端技術,伺服器在運作時為每一個使用者的浏覽器建立一個獨享的 Session 對象;使用者通路伺服器時,可以把各自的資料放到各自的 Session 中,當使用者再次通路伺服器中的 web 資源時,其他 web 資源再從使用者各自的 Session 中取出資料為使用者服務;
2. 會話技術的實作原理
3. 記錄使用者上次通路時間
Cookie
一、Cookie 的分類
- 預設級别的 Cookie
- 沒有設定有效時間的 Cookie;
- 預設情況下隻要關閉了浏覽器,Cookie 也會被銷毀;(Cookie 存在于浏覽器的記憶體中);
- 持久級别的 Cookie
- 設定了有效時間的 Cookie;
- 這種 Cookie 的内容不是儲存在浏覽器的記憶體中;(Cookie 的内容儲存在硬碟上);
- 關閉浏覽器,再次打開時浏覽器會加載硬碟上的檔案,Cookie 的資料不會丢失;
二、Cookie 的 API 的概述
1. Cookie 的使用步驟
- 建立Cookie對象,綁定資料
new Cookie(String name, String value)
- 發送Cookie,
response.addCookie(Cookie cookie)
- 擷取Cookie,
拿到資料 Cookie[] request.getCookies()
2. 實作原理
- 基于
和響應頭set-cookie
實作請求頭cookie
3. Cookie 在浏覽器中的儲存時間
- 預設情況下,當浏覽器關閉後,Cookie資料被銷毀
- 持久化存儲。
setMaxAge(int seconds)
- 正數:将 Cookie 資料寫入到硬碟,持久化存儲 Cookie 的存活時間;
- 負數:預設值;
- 零:删除 Cookie 資訊。
4. Cookie 共享問題
- 假設在一個 tomcat 伺服器中,有多個 web 項目,在這些 web 項目中的 cookie 能否共享
- 不同的 tomcat 服務期之間的 cookie 能否共享?
5. 構造方法
Cookie(String name, String value)
6. 其他方法
- 獲得 Cookie 的名稱的方法;
getName()
- 獲得 Cookie 的值的方法;
getValue()
- 獲得 Cookie 的有效域名;
setDonain(String pattern)
- 設定 Cookie 的有效路徑;
setPath(String uri)
- 設定 Cookie 的有效時長;
setMaxAge(int expiry)
三、Cookie 的使用細節
- 一個 Cookie 隻能一種辨別資訊,至少含有一個辨別該資訊的名稱和值;
-
一個 web 站點可以給一個浏覽器發送多個 cookie;
一個 web 浏覽器可以存儲多個 web 站點的 cookie;
- 浏覽器存放的 Cookie 的大小和個數是有限制的;
- 如果建立了一個 Cookie,并發送到浏覽器,預設情況下它是一個會話級别的 Cookie;
- cookie 一般用于存儲少量的不太敏感的資料;
- 在不登陸的情況下,完成伺服器對用戶端的身份識别;
Session
一、Session 的概述
1. Session 是什麼
- Session 稱為是一次會話,Cookie 将使用者産生的私有資料儲存到浏覽器端,Session 将使用者産生的私有資料儲存到伺服器端;
- 一個浏覽器獨占一個 Session 對象;
- 需要在儲存使用者資料的時候,伺服器程式可以将使用者資料寫到 Session 對象中,當使用者使用浏覽器通路其他程式時,其他程式可以從使用者的 session 中取出該使用者的資料,為使用者服務;
2. 為什麼有 Cookie 還要有 Session
Cookie | Session |
---|---|
儲存的資料有大小和數量限制 | 沒有個數和大小限制 |
資料是儲存到用戶端浏覽器上的(不是很安全) | 資料儲存在伺服器上(相對安全) |
3. Session 如何儲存使用者資料
- Session 對象由伺服器建立,開發人員可以調用 request 對象的 getSession 方法得到 Session 對象;
二、Session 的原理
- 伺服器是如何實作 一個 session 為一個使用者浏覽器服務的?
-
Session 的實作原理:
基于 Cookie 的,基于 Cookie 回寫了一個 Session 的ID;
三、Session 作為域對象存取資料
1. Session 作為域對象的 API
- 向 session 中存入資料;
setAttribute(String name, String value)
- 從 session 域中擷取資料;
getAttribute(String name)
- 從 session 域中移除資料;
removeAttribute(String name)
2. Session 作為域對象的作用範圍
- Session 作為域對象,作用範圍就是一次會話的範圍;
- 一次會話,指的是使用者打開浏覽器點選多個超連結,通路伺服器資源,到最後關閉浏覽器的過程;
- session可以存儲任意類型,任意大小的資料;
- 适合于儲存購物資訊、使用者登入資訊、驗證碼等。
Servlet 的資料通路範圍的總結(Servlet 的域對象的總結)
請求範圍(ServletRequest) | 會話範圍(HTTPSession) | 應用範圍(ServletContext) | |
---|---|---|---|
何時建立 | 當使用者向伺服器發送一次請求,伺服器建立一個 request 對象 | 伺服器端第一次調用 getSession() 方法時建立 | 伺服器啟動時建立,為每個 web 項目建立一個單獨的 ServletContext 對象 |
何時銷毀 | 當伺服器對這次請求做出了響應,伺服器會銷毀這個 request 對象 | 三種情況:①Session 過期,預設過期時間為30分鐘;②非正常關閉伺服器;③手動調用 session.invalidate(); | 伺服器關閉的時候,或者項目從伺服器中移除的時候 |
如何存資料 | void setAttribute(String name, String value) | void setAttribute(String name, String value) | void setAttribute(String name, String value) |
如何取資料 | Object getAttribute(String name) | Object getAttribute(String name) | Object getAttribute(String name) |
作用範圍 | 一次請求(轉發就是一次請求) | 一次會話(多次請求) | 整個應用 |