這裡僅僅針對瀏覽器中的cookie來討論,如果拋開其他特性來說,cookie本質上是瀏覽器(http請求)提供的一種客戶端儲存的資料,但是這個儲存資料有自己的一些特性,比如:cookie長度的限制,跨域的限制(當然可以在服務端配合的情況下的突破這種限制)等。
就像所有的儲存一樣,cookie也可以儲存在記憶體中,也可以儲存在磁碟中,只不過儲存在磁碟的時候是在瀏覽器的儲存目錄下,畢竟cookie是基於http的,http請求又基於瀏覽器。
session即會話,本質上是一種服務端的儲存資料。
誕生的主要原因是為了解決http無狀態這種特性。既然是資料,其實就可以儲存於任何介質中,像實際應用中,有儲存於記憶體中的,也有儲存於redis的。所以只要看透了它的本質,儲存在**可能就只是乙個驅動的問題了。
客戶端傳送乙個請求到伺服器
伺服器傳送乙個httpresponse響應到客戶端,其中包含set-cookie的頭部
客戶端儲存cookie,之後向伺服器傳送請求時,httprequest請求中會包含乙個cookie的頭部
伺服器返回響應資料
set-cookie: session=4a0b9b1cce73c469b8a6b6a8aec294d5; domain=.xx.com; path=/; expires=sun, 25 aug 2019 08:21:27 -0000; secure; httponly
以上過程是乙個最常見的場景,cookie的特性以及值是由服務端來下發,但是cookie本質上是一種客戶端技術,所以客戶端其實同樣能操作cookie,比如:
登入的時候服務端的返回結果中可以不包含set-cookie的頭部,而是把值通過正文來返回,客戶端指令碼通過讀取返回的正文解析出結果,然後寫入cookie同樣能達到相同的效果。
set-cookie只不過是http協議中已經約定好的格式,服務端告訴客戶端需要設定cookie的協議而已。當然cookie還有其他很多特性(可能隨著發展有所增加或者減少):
屬性介紹
name
name欄位為乙個cookie的名稱
value
value欄位為乙個cookie的值
domain
可以訪問此cookie的網域名稱
path
可以訪問此cookie的頁面路徑
expires/max-age
此cookie超時時間。
size
size欄位 此cookie大小
cookie的httponly屬性
secure
設定是否只能通過https來傳遞此條cookie
由於瀏覽器的安全策略,不同網域名稱的cookie是不允許的,但是可以通過服務端的配置可以解決這個問題。即跨域問題
session的建立目的初衷就是為了讓服務端記住會話,簡而言之就是讓服務端能識別出來是哪個客戶端,既然要記住,那服務端必須要儲存每個會話的資料,比如:實際專案中最常用的使用者資訊等。
服務端儲存這些使用者資料沒問題,最大的乙個障礙是怎麼樣識別諸多請求中哪些是同乙個會話。要解決這個問題,只依靠服務端無法解決,必須需要客戶端來配合:需要上傳會話的標識。
session機制利用cookie來作為標識的傳輸機制,並不意味著只能用cookie,只要是服務端和客戶端約定好了位置,session標識我可以放到http請求的任何位置(當然http請求必須得支援傳輸才可以)。你完全可以把session的標識放到http頭authorization欄位,只要服務端能正確的讀到此值並且正確解析即可。
有些面試官喜歡問cookie和session的相同和不同,甚至他們的聯絡,這樣的提問在某種程度上是不太好的,容易讓人錯誤的認為cookie和session的聯絡很密切,但是其實cookie和session之間沒有太大關係,主要分為:
Session和Cookie的區別
session和cookie的區別 1 儲存的位置不同 session儲存在伺服器端的記憶體中,占用伺服器資源。cookie是儲存在客戶端。可以是瀏覽器中或者是檔案中 2 儲存的時間不同 session是關閉當前會話相關瀏覽器後自動清空。cookie是根據過期時間而會有不同。3 安全性不同 sess...
cookie和session的區別
一 cookie機制和session機制的區別 具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於在伺服器端保持狀態的方案在客戶端也需要儲存乙個標識,所以session機制可能需要借助於cookie機制來達到儲存標識的目...
cookie和session的區別
分類 計算機網路 2011 10 21 10 43 4785人閱讀收藏 舉報 session 瀏覽器伺服器 servlet url儲存 一 cookie機制和session機制的區別 具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我...