一、前言:接口測試之傷:cookie,session,token本是一家!
cookie,session,token的區別早就已經成為測試同行的心病,各大論壇,各大博客,各大視頻網站無不充斥着各種疑問???cookie,session,token本是一家!奈何各位測試同仁總是要把它們分開!各位做測試的小伙伴們只要是做過接口測試或者面試過接口測試都一定會遇到這個問題,在寫這篇文章之前筆者也看過很多篇關於session,cookie,token的文章,感覺不是各種復制抄襲,就是泛泛而談沒講到要點上。希望本篇文章對大家有所幫助!助力大家hold住面試官,hold住了開3萬,hold不住開3K。全靠你自己的領悟了。
二、天地初開:http協議誕生
再講三者的區別之前必須先了解一下http協議,眾所周知訪問網頁都是使用的http協議,而http協議的每一次訪問都是無狀態的。什么叫無狀態?就是說這一次請求和上一次請求是沒有任何關系的,互不認識的,沒有關聯的。這種無狀態的的好處是快速。壞處就是無法把兩次請求關聯起來。比如下面的對話:
第一次請求:
夏洛:大爺,樓上322住的是馬冬梅家吧?
大爺:馬都什么?
第二次請求:
夏洛:馬冬梅。
大爺:什么都沒啊?
第三次請求:
夏洛:馬冬梅啊。
大爺:馬什么沒?
寫到這里我忍不住想起這段經典的對話!三次請求毫無關聯!請求完就斷開了!那么如何才能讓兩次請求之間有關聯呢?如何讓Web服務器是如何記住一些事情呢?
三、Cookie橫空出世。
Cookie詳解:
1.誰產生的,保存在哪里?:
web服務器產生。保存在客戶端!容易被劫持,不安全!
2.產生的過程(參考上圖):
(1)瀏覽器第一次訪問服務端時,服務器此時肯定不知道它的身份,所以創建一個獨特的身份標識數據,格式為key=value鍵值對,放入到Set-Cookie字段里,隨着響應報文一起發送給瀏覽器。
(2)瀏覽器看到有Set-Cookie字段以后就知道這是服務器給的身份標識,於是就保存起來,下次請求時會自動將此key=value值放入到Cookie字段中發給服務端。服務端收到請求報文后,發現Cookie字段中有值,就能根據此值識別用戶的身份然后提供個性化的服務。
3.Cookie的分類
Cookie分為持久化Cookie和非持久化的Cookie
持久化的Cookie:可以存在於硬盤中,瀏覽器關閉的話,Cookie也是會存在的。
非持久化的Cookie:存在與內存中,如果瀏覽器關閉的話,Cookie也會隨之消失。
登錄記住用戶名
瀏覽器記錄用戶已瀏覽過的網頁。
5.Cookie如何查看(以CSDN為例和谷歌瀏覽器為例)
保存密碼后:打開CSDN我的博客主頁:按F12,在如下圖的地址可以找到Cookie保存的用戶信息!
總結:Cookie數據由Web服務器生成保存在客服端。cookie的數據格式為鍵值對,cookie數據有失效時間看expire值。在項目中主要用於記住用戶名密碼或保存瀏覽器已訪問過的網頁。
四、Cookie出世之后,Session不服!
Session詳解:
1.誰產生的,保存在哪里?:
web服務器,保存在服務器!(原來和cookie是同一個母親,兩者本是一家,親兄弟)
2.產生的過程:
當用戶登錄了系統,服務器端的web容器就會創建一個session,此會話中可以保存登錄用戶的信息,並且也是以鍵值對的形式去保存的,系統通過session技術來做的鑒權,因為只有當用戶登錄了才可以訪問系統中的頁面和數據。
3.session在項目中的應用場景
一般只保存登錄用戶的用戶名。時長默認是30分鍾。所以為什么當你登錄系統后一段時間不使用就需要重新登錄。因為30分鍾后session就已經丟失了!
4.如何查看session(以CSDN為例和谷歌瀏覽器為例)
保存密碼后:打開CSDN我的博客主頁:按F12,在如下圖的地址可以找到Session保存的用戶信息!這里的session名稱叫:dc_session_id,這個名字不是固定的,有些叫:JSESSION_ID,有些叫:PHPSESSION_ID一個意思。這個dc_session_id會話編號10_1574860205504.859196就是服務器返回的。服務器端的這個dc_session_id會話保存了登錄用戶的信息。
五、Cookie,Session,Token三兄弟。
token詳解:
1.誰產生的,保存在哪里?:
web服務器,保存在數據庫中!(原來和cookie和session都是同一個母親,三者本是一家,三兄弟)
2.產生的過程:
(1)用戶第一次登陸的時候,服務端會產生一個token,token會存在於服務器的數據庫上,然后將這個token返回給瀏覽器。
(2)客戶端收到token之后會將token存儲在本地上
(3)客戶端再次發送請求的時候,會將token發送到服務器上
(4)服務端收到這個token的時候會將token與本地的token進行比較,可以來驗證身份。
3.session在項目中的應用場景
一般用於App項目登錄鑒權或者接口鑒權!因為app項目和接口客戶端都不是瀏覽器,因此就沒有cookie和session了。所以通過token來鑒權。
4.如何查看token
有些系統的token直接顯示在后面的頁面上!而接口的token一般在登錄接口的返回值里面。如下圖所示為登錄接口返回的token:名字可以隨便取:可以是token,也可以是下圖的access_token,或key,appkey等都可以。
六、本是同根生相煎何太急!
仔細閱讀此文后是不是感覺豁然開朗,原來cookie也好,session也好,token也好都是web服務器產生的,只是保存在不同的地方,分別為:客戶端,服務器,數據庫中,所以他們在項目中的應用場景也不一樣!如果你覺得此文對你有幫助,如果你對此文有任何疑問,如果你對軟件測試、接口測試、自動化測試、面試經驗交流感興趣歡迎加入:
軟件測試技術群:695458161,群里發放的免費資料都是筆者十多年測試生涯的精華。還有同行大神一起交流技術哦。
作者:來自公眾號:軟測之家
地址:https://www.cnblogs.com/csmashang/p/12669107.html
原創不易,本文用時兩個小時,歡迎點贊、評論、轉載禮貌三連,轉載請保留此段聲明。