一、Cookie的特點:
1、cookie是一門客戶端緩存技術
2、cookie數據由服務器生成,發送給瀏覽器保存
3、cookie數據的格式:鍵值對
4、cookie數據過期機制:設置expire值
cookie是一門客戶端技術,一般是由服務器生成返回給瀏覽器客戶端來保存的,並且cookie是以鍵值對的形式保存在瀏覽器客戶端的,每一個cookie都會有名稱,值,過期時間...。
cookie有很多使用場景,在項目中比較常見的有:
1、登錄記住用戶名和密碼
2、記錄用戶瀏覽記錄
...
上面應用中大家最熟悉的應該就是記住用戶名這個場景了,以京東網站的登錄功能為例,當我們登錄了一次京東,后面再去登錄頁面登錄的時候,會發現它會幫你回填之前的用戶名,這個場景就是通過cookie技術實現的。
二、session的特點:
1、session是一門服務端會話緩存技術。
2、session由服務器端的web容器創建,保存在服務器端。
3、session保存數據:鍵值對形式
4、session過期:默認30分鍾
session是服務端的會話技術,當用戶登錄了系統,服務器端的web容器就會創建一個會話,此會話中可以保存登錄用戶的信息,並且也是以鍵值對的形式去保存的,現在大部分系統都是使用的session技術來做的鑒權(權限鑒定),即:當用戶登錄完了才可以訪問系統中的一些頁面和數據。
通過fiddler抓包可以發現,login登錄接口的響應頭里有一個“set-cookie”的頭信息,里面就有“JSESSIONID=8AC39619BB5BE*********4337”這個信息,瀏覽器看到這個響應頭就知道要把這個數據寫到cookie當中,cookie名稱為:“JSESSIONID”,值為:“8AC39619BB5BE*********4337”。這個session會話編號就是服務器返回的。服務器端的這個session會話保存了登錄用戶的信息。
登錄完成后再訪問系統中的任何頁面都是有沒有問題的,因為后面每次請求都會帶上瀏覽器里cookie里面的這個“JSESSIONID”的值過去。
三、token機制。
app項目為例:
一般app項目都會基於一個token做鑒權。
因為此時客戶端不是瀏覽器,因此就沒有cookie這一說了。
當用戶登錄app時,服務器會響應回來一個token信息(一般都是返回的一串唯一的標識符,比如說uuid或其他)。
服務器端會將登錄用戶跟token(票據)保存一個映射關系,一般保存在redis或者表里面,服務器端響應回來的token會緩存在手機的本地緩存里,后面手機去訪問app的其他頁面,就會帶着這個token去服務器做驗證。
如果通過這個token能夠從redis找到登錄用戶信息,那么就認為你是已經登錄了的用戶。
三者相同的點:
不論是cookie、session還是token,都可以設置時限,一段時間后,就會失效。當失效之后,再次訪問的時候,就需要重新登錄了。