Tomcat中的Session與Cookie深入講解-創(chuàng)新互聯(lián)

前言

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務圖木舒克,十載網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108

HTTP 是一種無狀態(tài)通信協(xié)議,每個請求之間相互獨立,服務器不能識別曾經(jīng)來過的請求。而對于 Web 應用,它的活動都是依賴某個狀態(tài)的,比如用戶登錄,此時使用 HTTP 就需要它在一次登錄請求后,有為后續(xù)請求提供已登錄信息的能力。本文首發(fā)于公眾號頓悟源碼.

解決辦法就是使用 Cookie,它由服務器返回給瀏覽器,瀏覽器緩存并在每次請求時將 cookie 數(shù)據(jù)提交到服務器。Cookies 在請求中以明文傳輸,且大小限制 4KB,顯然把所有狀態(tài)數(shù)據(jù)保存在瀏覽器是不靠譜的,主流做法是:

  1. 瀏覽器發(fā)出第一個請求時,服務器為用戶分配一個唯一標識符,返回并存入瀏覽器的 Cookies 中
  2. 服務器內(nèi)部維護一個全局的請求狀態(tài)庫,并使用生成的唯一標識符關聯(lián)每個請求的狀態(tài)信息
  3. 瀏覽器后續(xù)發(fā)出的請求,都將唯一標識符提交給服務器,以便獲取之前請求的狀態(tài)信息

為了方便管理,服務器把整個過程稱為會話,并抽象成一個 Session 類,用于識別和存儲有關該用戶的信息或狀態(tài)。
接下來,將通過會話標識符的解析和生成,Session 的創(chuàng)建、銷毀和持久化等問題,分析 Tomcat 的源碼實現(xiàn),版本使用的是 6.0.53。

1. 解析會話標識符

Cookie 作為最常用的會話跟蹤機制,所有的 Servlet 容器都支持,Tomcat 也不例外,在 Tomcat 中,表示存儲會話標識符的 cookie 的標準名字是 JSESSIONID。

如果如果瀏覽器不支持 Cookie,也可以使用以下辦法,記錄標識符:

  • URL 重寫: 作為路徑參數(shù)包含到 url 中,如 /path;JSESSIONID=xxx
  • URL 請求參數(shù): 將會話唯一標識作為查詢參數(shù)添加到頁面所有鏈接中,如 /path?JSESSIONID=xxx
  • FORM 隱藏字段: 表單中使用一個隱藏字段存儲唯一值,隨表單提交到服務器

Tomcat 就實現(xiàn)了從 URL 重寫路徑和 Cookie 中提取 JSESSIONID。在分析源碼之前,首先看下設置 Cookie 的響應和帶 Cookie 的請求它們頭域的關鍵信息:

// 設置 Cookie
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=56AE5B92C272EA4F5E0FBFEFE6936C91; Path=/examples
Date: Sun, 12 May 2019 01:40:35 GMT

// 提交 Cookie
GET /examples/servlets/servlet/SessionExample HTTP/1.1
Host: localhost:8080
Cookie: JSESSIONID=56AE5B92C272EA4F5E0FBFEFE6936C91

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文標題:Tomcat中的Session與Cookie深入講解-創(chuàng)新互聯(lián)
分享路徑:http://muchs.cn/article48/pdpep.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT動態(tài)網(wǎng)站、響應式網(wǎng)站、網(wǎng)站設計公司、網(wǎng)站制作品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設