?

基于Cookie的會話跟蹤技術及應用

2021-10-25 03:42高春庚
信息記錄材料 2021年10期
關鍵詞:發送給瀏覽器客戶端

高春庚

(濟源職業技術學院信息工程系 河南 濟源 459000)

1 引言

由于HTTP協議是無狀態協議,服務器對用戶的請求進行響應后,就會關閉與該客戶端的連接,因此當用戶通過同一個客戶端再次發出請求時,服務器不能判斷該請求是否來自同一個客戶端。在某些情況下,Web服務器為了能夠給用戶提供更好的服務,必須能夠跟蹤客戶的狀態信息。為了解決這一問題,Netscape公司推出了Cookie這一狀態管理機制[1]。

2 Cookie概述

在Web應用中,Cookie是HTTP協議制定的一種會話跟蹤技術,是一種被廣泛采用的記錄客戶端用戶信息的技術。當用戶通過客戶端瀏覽器第一次訪問Web服務器時,Web服務器會在響應頭中增加Set-Cookie頭字段,把信息以Cookie的形式發送給客戶端瀏覽器,這些信息可以是用戶ID、訪問時間、訪問記錄等。當客戶端瀏覽器再次訪問Web服務器時,會把保存的Cookie再發送給服務器,以便服務器對瀏覽器做出相應的響應[2]。通過Cookie技術可以將用戶信息保存在客戶端,從而減輕服務器的負擔[3]。

Set-Cookie響應頭字段以鍵值對的形式設置Cookie,一個Cookie只保存一個鍵值對[4]。如圖1所示,在圖中,服務器向客戶端保存了兩個Cookie,name和age表示Cookie的名稱;zhangsan和30分別是其值;Expires是Cookie的過期時間。如果沒有設置Cookie的過期時間,在瀏覽器關閉的時候,該Cookie的生命就結束了。Cookie必須以鍵值對的形式存在,一個Cookie可以設置多個屬性,不同屬性之間必須以分號和空格分隔。

圖1 HTTP響應頭

客戶端瀏覽器收到服務器發送的Cookie信息,會將該信息保存在瀏覽器的緩沖區中,當瀏覽器以后再次訪問服務器時,會把該服務器保存的Cookie以HTTP請求頭的形式發送給Web服務器[5],見圖2。

圖2 HTTP請求頭

3 Cookie API

在Servlet API中定義了一個類,名稱為Cookie,位于javax.servlet.http包中。利用Cookie類可以創建Cookie、獲取Cookie屬性信息。Cookie類的構造方法和常用方法如下[2]。

3.1 構造方法

Cookie類的構造方法只有一種形式,其語法格式為:public Cookie(String name,String value)。該方法中,參數name表示Cookie的名稱,value表示Cookie的值。Cookie被創建后,它的名稱不能再更改,其值可以為任何值,創建后可以被修改。

3.2 Cookie類常用方法

通過Cookie的構造方法創建Cookie對象后,便可調用該類的方法,其常用方法見表1。

表1 Cookie類常用方法

setMaxAge(int expiry)和getMaxAge()兩個方法用于設置和返回Cookie在瀏覽器上保存的有效時間,以秒為單位。如果設置的expiry值為一個正整數,瀏覽器會將Cookie信息保存在本地硬盤中,有效時長由expiry的值決定;如果設置的expiry值為負整數,瀏覽器會將Cookie信息保存在緩存中,當瀏覽器關閉時,Cookie信息會被刪除;如果設置expiry為0,則表示瀏覽器會馬上刪除這個Cookie。

setPath(String uri)和getPath()兩個方法是針對Cookie的Path屬性的。如果創建Cookie對象時沒有設置Path屬性,其默認值是當前訪問路徑的父路徑。瀏覽器訪問Web服務器時,如果訪問路徑中包含某個Cookie的路徑,就會將該Cookie以HTTP請求頭的形式發送給Web服務器。

4 Cookie應用

當用戶訪問某些Web應用時,經常會顯示出上次訪問時間。本文通過一個具體的案例來實現顯示用戶上次訪問時間。

(1)創建Web工程,在工程下新建Servlet并命名為LastAccess,偽代碼如下:

String lastAccessTime = null;

Cookie[]cookies=獲取服務器發送的所有Cookie

for(int i=0;i

if(名稱為lastAccess的Cookie存在){

lastAccessTime = 獲取名稱為lastAccess的Cookie的值

break;

}

}

if(lastAccessTime的值為null){

輸出"您是第一次訪問本站!"

}else{

輸出"您上次訪問時間是:lastAccessTime"

}

//創建Cookie,將當前時間作為Cookie的值發送給客戶端

String currentTime = 獲取當前時間

Cookie cookie = new Cookie("lastAccess",currentTime);

//設置cookie的有效時間為24小時,并發送到客戶端

cookie.setMaxAge(60*60*24);

response.addCookie(cookie);

}

(2)啟動服務器,在瀏覽器輸入訪問地址,由于是第一次訪問,會在瀏覽器中看到“您是第1次訪問本站”,見圖3。

圖3 第1次訪問

(3)重新訪問該地址,會發現服務器獲取到了用戶上次的訪問時間,見圖4。

圖4 再次訪問結果

圖4之所以顯示了用戶的上次訪問時間,是因為第一次訪問時,LastAccess向瀏覽器發送了保存用戶訪問時間的Cookie信息。當再次通過瀏覽器訪問時,只要Cookie設置的有效時間沒有結束,用戶就可以看到上次的訪問時間。

5 結語

本文介紹了基于Cookie的會話跟蹤及其應用。主要介紹了Cookie的概念,Cookie類常用的方法,最后通過一個實例,實現了通過Cookie技術,獲取用戶上次訪問Web資源的時間。通過實驗證明,達到了預期的效果。當然,本方法還有進一步完善的地方,如在跟蹤用戶狀態的同時,要考慮Cookie的安全問題、用戶隱私的保護等,在以后的研究中要進一步完善。

猜你喜歡
發送給瀏覽器客戶端
如何看待傳統媒體新聞客戶端的“斷舍離”?
反瀏覽器指紋追蹤
縣級臺在突發事件報道中如何應用手機客戶端
孵化垂直頻道:新聞客戶端新策略
公告
環球瀏覽器
關注微信,分享資訊,免費獲取電子閱讀卡
關注微信,分享資訊,免費獲取電子閱讀卡
我的錄夢機
客戶端空間數據緩存策略
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合