Jmeter(八)HTTPCookie管理器


   Cookie絕對是日常工作以及技術中一個繞不過去的‘角色’,正常各種各樣的業務需要Cookie的存在。Jmeter中也有支持發送Cookie的組件,但是,僅是后話;在此還是有必要先記一記Cookie到底是什么?Session又是什么?各在系統中充當了一個怎么樣的角色,起到了哪些作用?

   得回到http協議的結構以及特點,http協議中定義了信息頭、響應頭的存在,而cookie又是信息頭的一部分,那么又與我們之前的HTTP信息頭管理器和HTTPCookie管理器如何進行區分,或者在工作中如何使用。

 
(有關http協議的知識,在其他總結中進行總結。)
大體整理一下思路:首先呢,HTTP協議是無狀態協議,所謂無狀態就是指協議對於事務處理沒有記憶能力。缺少狀態的話便意味着如果后續處理需要前面的信息,則它是必須重傳,這樣就導致了一個弊端------每次連接傳輸的數據量增大;而Cookie便是解決這一問題的手段之一!通過Cookie來進行保存狀態信息,那么服務器便知道請求都是來自同一個客戶端。
 
而有時也會將Cookie和Session的概念進行搞混,由於自身可能描述有限,在知乎上找到一個不錯的回答。
 
1. 由於HTTP協議是無狀態的協議,所以服務端需要記錄用戶的狀態時,就需要用某種機制來識具體的用戶,這個機制就是Session.典型的場景比如購物車,當你點擊下單按鈕時,由於HTTP協議無狀態,所以並不知道是哪個用戶操作的,所以服務端要為特定的用戶創建了特定的Session,用用於標識這個用戶,並且跟蹤用戶,這樣才知道購物車里面有幾本書。這個Session是保存在服務端的,有一個唯一標識。在服務端保存Session的方法很多,內存、數據庫、文件都有。集群的時候也要考慮Session的轉移,在大型的網站,一般會有專門的Session服務器集群,用來保存用戶會話,這個時候 Session 信息都是放在內存的,使用一些緩存服務比如Memcached之類的來放 Session。
2. 思考一下服務端如何識別特定的客戶?這個時候Cookie就登場了。每次HTTP請求的時候,客戶端都會發送相應的Cookie信息到服務端。實際上大多數的應用都是用 Cookie 來實現Session跟蹤的,第一次創建Session的時候,服務端會在HTTP協議中告訴客戶端,需要在 Cookie 里面記錄一個Session ID,以后每次請求把這個會話ID發送到服務器,我就知道你是誰了。有人問,如果客戶端的瀏覽器禁用了 Cookie 怎么辦?一般這種情況下,會使用一種叫做URL重寫的技術來進行會話跟蹤,即每次HTTP交互,URL后面都會被附加上一個諸如 sid=xxxxx 這樣的參數,服務端據此來識別用戶。
3. Cookie其實還可以用在一些方便用戶的場景下,設想你某次登陸過一個網站,下次登錄的時候不想再次輸入賬號了,怎么辦?這個信息可以寫到Cookie里面,訪問網站的時候,網站頁面的腳本可以讀取這個信息,就自動幫你把用戶名給填了,能夠方便一下用戶。這也是Cookie名稱的由來,給用戶的一點甜頭。
所以,總結一下:
Session是在服務端保存的一個數據結構,用來跟蹤用戶的狀態,這個數據可以保存在集群、數據庫、文件中;
Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,也是實現Session的一種方式。
 
So,回到Jmeter,舉一個日常工作中的例子:
  比如,下單接口需要校驗用戶是否在線、、、其言外之意便是除非登陸才能進行下單,否則不能下單。那么如何讓登陸成功的接口狀態傳至下單接口呢?
  對、、、HTTPCookie管理器!
  HTTPCookie管理器有很良好的機制,如果請求的響應中包含Cookie,則Cookie管理器便會自動存儲該Cookie,用於針對該特定網站的所有請求。
  所以,只要加個HTTPCookie管理器,不需要添加任何內容,便能解決上方登陸下單的問題。
  這塊需要特定記錄的一點是:Cookie本就是信息頭中的一部分,所以當在HTTP信息頭管理器中添加了Cookie字段,那就沒必要再在HTTPCookie管理器中添加值,甚至也不用加HTTPCookie管理器組件,避免發送重復Cookie;相對而言,在HTTPCookie管理器中傳入了Cookie的值,那么在信息頭中也不用再添加Cookie的字段。
  
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM