前言
HTTP 是一種無狀態(tài)通信協(xié)議,每個請求之間相互獨立,服務(wù)器不能識別曾經(jīng)來過的請求。而對于 Web 應(yīng)用,它的活動都是依賴某個狀態(tài)的,比如用戶登錄,此時使用 HTTP 就需要它在一次登錄請求后,有為后續(xù)請求提供已登錄信息的能力。本文首發(fā)于公眾號頓悟源碼.
解決辦法就是使用 Cookie,它由服務(wù)器返回給瀏覽器,瀏覽器緩存并在每次請求時將 cookie 數(shù)據(jù)提交到服務(wù)器。Cookies 在請求中以明文傳輸,且大小限制 4KB,顯然把所有狀態(tài)數(shù)據(jù)保存在瀏覽器是不靠譜的,主流做法是:
為了方便管理,服務(wù)器把整個過程稱為會話,并抽象成一個 Session 類,用于識別和存儲有關(guān)該用戶的信息或狀態(tài)。
接下來,將通過會話標(biāo)識符的解析和生成,Session 的創(chuàng)建、銷毀和持久化等問題,分析 Tomcat 的源碼實現(xiàn),版本使用的是 6.0.53。
1. 解析會話標(biāo)識符
Cookie 作為最常用的會話跟蹤機(jī)制,所有的 Servlet 容器都支持,Tomcat 也不例外,在 Tomcat 中,表示存儲會話標(biāo)識符的 cookie 的標(biāo)準(zhǔn)名字是 JSESSIONID。
如果如果瀏覽器不支持 Cookie,也可以使用以下辦法,記錄標(biāo)識符:
Tomcat 就實現(xiàn)了從 URL 重寫路徑和 Cookie 中提取 JSESSIONID。在分析源碼之前,首先看下設(shè)置 Cookie 的響應(yīng)和帶 Cookie 的請求它們頭域的關(guān)鍵信息:
// 設(shè)置 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
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
本文標(biāo)題:Tomcat中的Session與Cookie深入講解-創(chuàng)新互聯(lián)
分享路徑:http://www.rwnh.cn/article48/pdpep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、動態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計公司、網(wǎng)站制作、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容