一、概述
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中如果...