天天看點

cookie和session

大家在我們清理浏覽器浏覽痕迹的時候有看到清理cookie的選項,

   其實這個cookie機制是為了存儲使用者資料,存儲地點是用戶端,

        Cookie 是一種保持 Web 應用程式連續性(即執行“狀态管理”)的方法。浏覽器和 Web 伺服器除了在短暫的實際資訊交換階段以外總是斷開的,而使用者向 Web 伺服器發送的每個請求都是單獨處理的,與其他所有請求無關。然而在大多數情況下,都有必要讓 Web 伺服器在您請求某個頁面時對您進行識别。、

        就好比我們平常的購物車儲存,還有登入狀态儲存,然後對于這個而言,cookie他具體做了什麼呢?

----------------------------------------------------------------------------------------------------------------------------

cookie機制

Cookies是伺服器在本地機器上存儲的小段文本并随每一個請求發送至同一個伺服器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie規範。網絡伺服器用HTTP頭向用戶端發送cookies,在客戶終端,浏覽器解析這些cookies并将它們儲存為一個本地檔案,它會自動将同一伺服器的任何請求縛上這些cookies 。其實就是解決HTTP協定無狀态的特性

正統的cookie分發是通過擴充HTTP協定來實作的,伺服器通過在HTTP的響應頭中加上一行特殊的訓示以提示浏覽器按照訓示生成相應的cookie。如果某個cookie所聲明的作用範圍大于等于将要請求的資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上發送給伺服器。

其中cookie包含什麼~

cookie的内容主要包括:名字,值,過期時間,路徑和域。

ps:路徑與域一起構成cookie的作用範圍。若不設定過期時間,則表示這個cookie的生命期為浏覽器會話期間,關閉浏覽器視窗,cookie就消失。

    不設定過期時間則是會話cookie儲存在記憶體中,若設定了過期時間,則會儲存在硬碟中,而且cookie可以在不同浏覽器中共享,完全取決于浏覽器的處理機制

那麼還有一個session機制,這個代表什麼呢?

cookie機制中,是吧使用者資訊儲存在用戶端中,而session則是在伺服器端存儲。由于采用伺服器端保持狀态的方案在用戶端也需要儲存一個辨別,是以session機制可能需要借助于cookie機制來達到儲存辨別的目的。而session提供了友善管理全局變量的方式 。

對于安全性而言:

就安全性來說:當你通路一個使用session 的站點,同時在自己機子上建立一個cookie,建議在伺服器端的session機制更安全些,因為它不會任意讀取客戶存儲的資訊。

對于session的存儲:

session機制是一種伺服器端的機制,伺服器使用一種類似于散清單的結構(也可能就是使用散清單)來儲存資訊。

當程式需要為某個用戶端的請求建立一個session時,伺服器首先檢查這個用戶端的請求裡是否已包含了一個session辨別(稱為session id),如果已包含則說明以前已經為此用戶端建立過session,伺服器就按照session id把這個session檢索出來使用(檢索不到,會建立一個),如果用戶端請求不包含session id,則為此用戶端建立一個session并且生成一個與此session相關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字元串,這個session id将被在本次響應中傳回給用戶端儲存。其實就有點相當于hash_key。儲存這個session id的方式可以采用cookie,這樣在互動過程中浏覽器可以自動的按照規則把這個辨別發揮給伺服器。一般這個cookie的名字都是類似于SEEESIONID。但cookie可以被人為的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回伺服器。

    session利用的方法:

   1. URL重寫,就是把session id直接附加在URL路徑的後面。

   2. 表單隐藏字段。就是伺服器會自動修改表單,添加一個隐藏字段,以便在表單送出時能夠把session id傳遞回伺服器。

-------------------------------------------------------------------------------------------

那麼适用的場景呢?

1 .存取方式的不同

Cookie中隻能保管ASCII字元串,假如需求存取Unicode字元或者二進制資料,需求先進行編碼。

而Session中能夠存取任何類型的資料,包括而不限于String、Integer、List、Map等。

2 .隐私政策的不同

Cookie存儲在用戶端閱讀器中,對用戶端是可見的,用戶端的一些程式可能會窺探、複制以至修正Cookie中的内容。木馬什麼的就是通過這個擷取密碼資訊。

Session存儲在伺服器上,對用戶端是透明的,不存在敏感資訊洩露的風險。

下面就是字面上的意思,通過上面講解都可以了解,

3.有效期上的不同

4.伺服器壓力的不同 

5 .浏覽器支援的不同

6.跨域支援上的不同

Cookie支援跨域名通路,例如将domain屬性設定為“.biaodianfu.com”,則以“.biaodianfu.com”為字尾的一切域名均能夠通路該Cookie。

而Session則不會支援跨域名通路。Session僅在他所在的域名内有效。

繼續閱讀