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的字段。
相關文章
相關標籤/搜索