一、前言:介面測試之傷:cookie,session,token本是一家!

cookie,session,token的區別早就已經成為測試同行的心病,各大論壇,各大部落格,各大影片網站無不充斥著各種疑問???cookie,session,token本是一家!奈何各位測試同仁總是要把它們分開!各位做測試的小夥伴們只要是做過介面測試或者面試過介面測試都一定會遇到這個問題,在寫這篇文章之前筆者也看過很多篇關於session,cookie,token的文章,感覺不是各種複製抄襲,就是泛泛而談沒講到要點上。希望本篇文章對大家有所幫助!助力大家hold住面試官,

hold住了開3萬,hold不住開3K。

全靠你自己的領悟了。

二、天地初開:

http協議

誕生

再講三者的區別之前必須先了解一下http協議,

眾所周知訪問網頁都是使用的http協議,而http協議的每一次訪問都是無狀態的。

什麼叫無狀態?就是說這一次請求和上一次請求是沒有任何關係的,互不認識的,沒有關聯的。這種無狀態的的好處是快速。壞處就是無法把兩次請求關聯起來。比如下面的對話:

介面測試徹底弄懂Session、Cookie、Token的區別及聯絡-hold住面試官開3萬

第一次請求:

夏洛:大爺,樓上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也會隨之消失。

4.cookie在專案中的應用場景

登入記住使用者名稱

瀏覽器記錄使用者已瀏覽過的網頁。

5.Cookie如何檢視(以CSDN為例和谷歌瀏覽器為例)

儲存密碼後:開啟CSDN我的部落格主頁:按F12,在如下圖的地址可以找到Cookie儲存的使用者資訊!

介面測試徹底弄懂Session、Cookie、Token的區別及聯絡-hold住面試官開3萬

總結: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會話儲存了登入使用者的資訊。

介面測試徹底弄懂Session、Cookie、Token的區別及聯絡-hold住面試官開3萬

總結:Session是Cookie的兄弟也是由Web伺服器生成儲存在服務端。Session的資料格式也是鍵值對,Session預設失效時間為30分鐘。一般在瀏覽器的F12中的響應頭的cookie(或set-cookie)中檢視,在專案中主要用於鑑權判斷是否登入狀態。只有是登入狀態才可以訪問伺服器的網頁和資料。

五、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等都可以。

介面測試徹底弄懂Session、Cookie、Token的區別及聯絡-hold住面試官開3萬

六、本是同根生相煎何太急!

介面測試徹底弄懂Session、Cookie、Token的區別及聯絡-hold住面試官開3萬

仔細閱讀此文後是不是感覺豁然開朗,原來cookie也好,session也好,token也好都是web伺服器產生的,只是儲存在不同的地方,分別為:客戶端,

伺服器

,資料庫中,所以他們在專案中的應用場景也不一樣!

七、總結

如果你覺得此文對你有幫助,如果你對此文有任何疑問,如果你對軟體測試、介面測試、自動化測試、面試經驗交流感興趣請拉到最上面關注筆者的名字!

一箭三雕:如果你覺得本文對你有幫助,請關注,贊同,分享三連!謝謝!

作者出處:逍遙子:介面測試徹底弄懂Session、Cookie、Token的區別及聯絡-hold住面試官開3萬

轉載宣告:歡迎轉載,但未經作者同意請保留此段宣告,並在文章明顯位置給出原文連結。