Cookie,Session傻傻分不清楚?

1、Cookie的特色:html

 

一、cookie是一門客戶端緩存技術web

二、cookie數據由服務器生成,發送給瀏覽器保存redis

三、cookie數據的格式:鍵值對瀏覽器

四、cookie數據過時機制:設置expire值緩存

 

cookie是一門客戶端技術,通常是由服務器生成返回給瀏覽器客戶端來保存的,而且cookie是以鍵值對的形式保存在瀏覽器客戶端的,每個cookie都會有名稱,值,過時時間...。服務器

cookie有不少使用場景,在項目中比較常見的有:cookie

 

一、登陸記住用戶名session

二、記錄用戶瀏覽記錄app

  ...svg

上面應用中你們最熟悉的應該就是記住用戶名這個場景了,以京東網站的登陸功能爲例,當咱們登陸了一次京東,後面再去登陸頁面登陸的時候,會發現它會幫你回填以前的用戶名,這個場景就是經過cookie技術實現的。

 

一、打開火狐瀏覽器,訪問京東登陸頁面輸入登陸帳號,密碼完成登陸:

 

 

二、首頁退出登陸:

 

 

三、登陸頁面再次登陸發現用戶名輸入框已經回填了以前的手機號:

 

 

四、F12打開火狐瀏覽器找到保存手機號的這個cookie:「mp」,值就是咱們填寫的用戶名信息:

 

 

總結:此實現過程:登陸成功,將手機號寫入到cookie---》回到登陸頁面再次登陸時,根據mp這個cookie的名稱取出手機號的值回填到用戶名輸入框(根據鍵取出值)

 

拓展:cookie是有過時機制的,能夠經過設置cookie的過時時間來控制cookie何時過時

 

 

這個mp的過時時間爲一個月,所以這一個月內只要不清除瀏覽器端的cookie數據,那麼使用火狐瀏覽器來訪問京東的登陸頁面均可以看到手機號回填的效果。

 

        

2、session的特色:

 

一、session是一門服務端會話緩存技術。

二、session由服務器端的web容器建立,保存在服務器端。

三、session保存數據:鍵值對形式

四、session過時:默認30分鐘

 

 

session是服務端的會話技術,當用戶登陸了系統,服務器端的web容器就會建立一個會話,此會話中能夠保存登陸用戶的信息,而且也是以鍵值對的形式去保存的,如今大部分系統都是使用的session技術來作的鑑權(權限鑑定),即:當用戶登陸完了才能夠訪問系統中的一些頁面和數據。

 

如下面的系統爲例:

 

直接訪問系統lmcanon的首頁index.html沒法訪問成功,會被重定向到登陸頁面login.html,由於這個系統有作用戶鑑權,沒有登陸的用戶沒法訪問系統裏面的數據。

 

 

以下:

 

 

如今登陸系統:

 

 

打開F12能夠看到,login登陸接口的響應頭裏有一個「set-cookie」的頭信息,裏面就有「JSESSIONID=8AC39619BB5BEC4426CF999A92E74337」這個信息,瀏覽器看到這個響應頭就知道要把這個數據寫到cookie當中,cookie名稱爲:「JSESSIONID」,值爲:「8AC39619BB5BEC4426CF999A92E74337」。這個session會話編號就是服務器返回的。服務器端的這個session會話保存了登陸用戶的信息。

 

 

做爲cookie緩存後,在瀏覽器的cookie中就能看到這個數據,以下圖:

 

 

登陸完成後再訪問系統中的任何頁面都是有沒有問題的,由於後面每次請求都會帶上瀏覽器裏cookie裏面的這個「JSESSIONID」的值過去。

 

以下圖,訪問「一週排課」 這個菜單的時候,請求這個頁面以及頁面的任何一個接口請求都會在請求頭裏面帶上這個會話id「8AC39619BB5BEC4426CF999A92E74337」 而後再提交到服務器,以下圖的這個請求:

 

 

 

當服務器收到這個請求的「Cookie」請求頭裏的會話id去服務器匹配,判斷是同一個session會話,會話中有登陸用戶的信息,從而判斷這個請求是一個登陸用戶發出的,從而放行這個請求。

 

上面這個過程能夠用下面的這張圖來表示:

 

 

 

拓展1:session過時處理。

 

當服務器端的會話過時了,那麼當你繼續發起請求的時候,由於你從客戶端帶過去的會話編號仍是以前的那個,就會驗證不經過,就會提示你會話過時請從新登陸。

 

拓展2:token機制。

 

app項目爲例:


通常app項目都會基於一個token作鑑權。
由於此時客戶端不是瀏覽器,所以就沒有cookie這一說了。
當用戶登陸app時,服務器會響應回來一個token信息(通常都是返回的一串惟一的標識符,好比說uuid或其餘)。


服務器端會將登陸用戶跟token(票據)保存一個映射關係,通常保存在redis或者表裏面,服務器端響應回來的token會緩存在手機的本地緩存裏,後面手機去訪問app的其餘頁面,就會帶着這個token去服務器作驗證。

若是經過這個token可以從redis找到登陸用戶信息,那麼就認爲你是已經登陸了的用戶。

token失效:
一段時間後,服務器端的token失效了,那麼就會把此token跟用戶的映射關係從redis裏刪掉。

後面再來訪問的時候,根據你手機請求帶來的token就匹配不上登陸用戶了,服務器就告訴客戶端,須要去作從新登陸了。

 

相關文章
相關標籤/搜索