Cookie與Session概念與區別

2021-09-24 07:58:02 字數 2866 閱讀 5841

一、概述

http 協議是無狀態的,為了讓 http 協議盡可能簡單,使得它能夠處理大量事務。http 引入 cookie 來儲存狀態資訊。

cookie 是伺服器傳送到使用者瀏覽器並儲存在本地的一小塊資料,它會在瀏覽器之後向同一伺服器再次發起請求時被攜帶上,用於告知服務端兩個請求是否來自同一瀏覽器。

由於之後每次請求都會需要攜帶 cookie 資料,因此會帶來額外的效能開銷(尤其是在移動環境下)。

二、主要用途

三、建立方式

在客戶端給伺服器傳送完http請求之後,伺服器可以在反饋的http響應報文中包含 set-cookie 首部字段,客戶端得到響應報文後把 cookie 內容儲存到瀏覽器中。

http響應報文如下

客戶端之後對同乙個伺服器傳送請求時,會從瀏覽器中取出 cookie 資訊並通過 cookie 請求首部字段傳送給伺服器。

再次進行http請求的報文如下

四、分類

若不設定過期時間,則表示這個cookie的生命期為瀏覽器會話期間,關閉瀏覽器視窗,cookie就消失。會話cookie一般不儲存在硬碟上而是儲存在記憶體裡,當然這種行為並不是規範規定的。

若設定了過期時間,瀏覽器就會把cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些cookie仍然有效直到超過設定的過期時間。儲存在硬碟上的cookie可以在瀏覽器的不同程序間共享。

如下所示,這是乙個永續性的cookie,過期時間為2023年6月10日晚6點半。

set-cookie: user_id=1; expires=mon, 10 jun 2019 18:30:00 gmt;

五、作用域

path屬性

path 標識指定了主機下的哪些路徑可以接受 cookie(該 url 路徑必須存在於請求 url 中)。以字元 %x2f ("/") 作為路徑分隔符,子路徑也會被匹配。例如,設定 path=/docs,則以下位址都會匹配:

domain屬性

domain 標識指定了哪些主機可以接受 cookie。如果不指定,預設為當前文件的主機(不包含子網域名稱)。如果指定了 domain,則一般包含子網域名稱。例如,如果設定 domain=test.org,則 cookie 也包含在子網域名稱中(如 abcd.test.org)。

一、概述

session 是另一種記錄客戶狀態的機制,不同的是 cookie 儲存在客戶端瀏覽器中,而session 儲存在伺服器上。

客戶端瀏覽器訪問伺服器的時候,伺服器把客戶端資訊以某種形式記錄在伺服器上。這就是 session 。客戶端瀏覽器再次訪問時只需要從該 session中查詢該客戶的狀態就可以了。

session 可以儲存在伺服器上的檔案、資料庫或者記憶體中。也可以將 session 儲存在redis這種記憶體型資料庫中,效率會更高。

二、session的建立與使用

拿最常見的使用session維護使用者登入狀態舉個例子

三、禁用cookie

如果客戶端禁用了cookie,通常有兩種方法實現session而不依賴cookie。

name

="testform"

action

="/***"

>

type

="hidden"

name

="sessionid"

value

="byok3vjfd75apcg!-145788764"

>

type

="text"

>

form

>

四、cookie和session的關係圖示

cookie 只能儲存 ascii 碼字串,而 session 則可以儲存任何型別的資料,因此在考慮資料複雜性時首選 session

cookie 儲存在瀏覽器中,容易被惡意檢視。考慮安全性時首選 session。如果非要將一些隱私資料存在 cookie 中,可以將 cookie 值進行加密,然後在伺服器進行解密;

對於大型**,如果使用者所有的資訊都儲存在 session 中,那麼開銷非常大的,因此不建議將所有的使用者資訊都儲存到 session 中。

單個 cookie 儲存的資料不能超過4k,很多瀏覽器都限制乙個站點最多儲存20個cookie ,而session無所謂。

cookie與session的關聯

前提 cookie沒有被禁用。當用瀏覽器登入到某 伺服器時,先找對應的cookie檔案,當首次訪問是當然沒有cookie檔案,所以在請求頭部中沒有cookie的內容,即在請求頭部中沒有類似cookie jsessionid 的內容,這時當請求到達伺服器後,伺服器看請求頭中沒有jsessionid值,...

session與cookie的區別

讓我們用幾個例子來描述一下cookie和session機制之間的區別與聯絡。筆者曾經常去的一家咖啡店有喝5杯咖啡免費贈一杯咖啡的優惠,然而一次性消費5杯咖啡的機會微乎其微,這時就需要某種方式來紀錄某位顧客的消費數量。想象一下其實也無外乎下面的幾種方案 1 該店的店員很厲害,能記住每位顧客的消費數量,...

session與cookie的區別

1 session儲存在伺服器,客戶端不知道其中的資訊 cookie儲存在客戶端,伺服器能夠知道其中的資訊。2 session中儲存的是物件,cookie中儲存的是字串。3 session不能區分路徑,同乙個使用者在訪問乙個 期間,所有的session在任何乙個地方都可以訪問到。而cookie中如果...