Cookie
Cookie概念(來源百度百科)
cookie(儲存在用戶本地終端上的數(shù)據(jù))百度百科
Cookie,有時也用其復(fù)數(shù)形式 Cookies。類型為“小型文本文件”,是某些網(wǎng)站為了辨別用戶身份,進行Session跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密),由用戶客戶端計算機暫時或永久保存的信息
為什么使用Cookie?
HTTP Cookie(也叫Web Cookie或瀏覽器Cookie)是服務(wù)器發(fā)送到用戶瀏覽器保存在本地的數(shù)據(jù),會在瀏覽器下次向同一服務(wù)器再次發(fā)起請求時攜帶并發(fā)送到服務(wù)器上。用來告知服務(wù)器兩個請求是否來自同一個瀏覽器,例如,保持用戶的登錄狀態(tài)。Cookie是使于無狀態(tài)的HTTP協(xié)議記錄穩(wěn)定的狀態(tài)信息成為了可能。
Cookie主要用于三個方面
- 會話狀態(tài)管理(用戶登錄狀態(tài),其他需要記錄保持的信息)
- 個性化設(shè)置(用戶自定義的主題,設(shè)置等)
- 瀏覽器行為跟蹤(跟蹤用戶行為并進行分析)
Cookie的組成
Cookie是一段不超過4KB的小型文本數(shù)據(jù),由一個名稱(Name)、一個值(Value)和其它幾個用于控制Cookie有效期、安全性、使用范圍的可選屬性組成

Name/Value屬性
設(shè)置Cookie的名稱及其對應(yīng)的值,對于認(rèn)證Cookie,Value值包括Web服務(wù)器所提供的訪問令牌
Expires屬性
- 設(shè)置Cookie的生存期,有兩種存儲類型的Cookie,會話性和持久性。Expires屬性缺省時,為會話性Cookie,僅保存在
客戶端內(nèi)存中,并在用戶關(guān)閉瀏覽器失效 - 持久性Cookie會保存在
用戶的硬盤中,直至生存期結(jié)束或用戶手動結(jié)束才會失效
Path屬性
定義Web站點可以訪問該Cookie的目錄
Domain屬性
指定可以訪問該Cookie的Web站點或域
Cookie 機制并未遵循嚴(yán)格的同源策略,允許一個子域可以設(shè)置或獲取其父域的 Cookie。當(dāng)需要實現(xiàn)單點登錄方案時,Cookie 的上述特性非常有用,然而也增加了 Cookie受攻擊的危險,比如攻擊者可以借此發(fā)動會話定置攻擊。
Secure屬性
指定是否使用HTTPS安全協(xié)議發(fā)送Cookie。使用HTTPS安全協(xié)議,可以保護Cookie在瀏覽器和Web服務(wù)器間的傳輸過程中不被竊取和篡改
HTTP Only屬性
用于防止客戶端腳本通過document.cookie屬性訪問Cookie,有助于保護Cookie不被跨站腳本攻擊竊取或篡改。但是,HTTPOnly的應(yīng)用仍存在局限性,一些瀏覽器可以阻止客戶端腳本對Cookie的讀操作,但允許寫操作
Cookie的缺點
- 數(shù)量受到限制,一個瀏覽器最多創(chuàng)建的Cookie數(shù)量為300個,且每個不能超過4KB,每個Web站點能設(shè)置的Cookie總數(shù)不能超過20個
- 安全性無法得到保障
- 瀏覽器可以使用禁用Cookie
Cookie的應(yīng)用場景
- 對安全性不高的場景
- 不需要大量存儲數(shù)據(jù)
- 用來做客戶端與服務(wù)器之間的狀態(tài)保持
Session
Session概念(來源百度百科)
Session:在計算機中,尤其是在網(wǎng)絡(luò)應(yīng)用中,稱為“會話控制”。Session對象存儲特定用戶會話所需的屬性及配置信息。這樣,當(dāng)用戶在應(yīng)用程序的Web頁之間跳轉(zhuǎn)時,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當(dāng)用戶請求來自應(yīng)用程序的 Web頁時,如果該用戶還沒有會話,則Web服務(wù)器將自動創(chuàng)建一個 Session對象。當(dāng)會話過期或被放棄后,服務(wù)器將終止該會話。Session 對象最常見的一個用法就是存儲用戶的首選項
Session工作原理(和Cookie的配合)
Cookie保存Session的id,保存這個Session ID的方式可以用Cookie
Session機制是一種服務(wù)端的機制
當(dāng)程序需要為某個客戶端的請求創(chuàng)建一個
Session時,服務(wù)器首先檢查這個客戶端的請求是否包含了一個Session的標(biāo)識(Session ID),如果已經(jīng)包含則說明以前為此客戶端創(chuàng)建過Session,服務(wù)器就按照Session ID把對應(yīng)的Session檢索出來使用(檢索不到,會新建一個)當(dāng)客戶端請求不包含
Session ID,則為此客戶端創(chuàng)建Session并且生成一個與此Session相對應(yīng)的Session ID,Session ID的值應(yīng)該是一個不會重復(fù),不容易找到規(guī)律的字符串。這個Session ID將在本次響應(yīng)中返回給客戶端保存,保存采用Cookie方式,這樣在交互過程中瀏覽器可以自動的按照規(guī)則把標(biāo)識發(fā)給服務(wù)器,但是Cookie可以被人為禁止,必須有其他機制以便在Cookie禁止時扔能夠把Session ID傳遞回給服務(wù)器
Cookie和Session的區(qū)別
Cookie 和 Session 有什么不同?
- 作用范圍不同,Cookie 保存在客戶端(瀏覽器),Session 保存在服務(wù)器端。
- 存取方式的不同,Cookie 只能保存 ASCII,Session 可以存任意數(shù)據(jù)類型,一般情況下我們可以在 Session 中保持一些常用變量信息,比如說 UserId 等。
- 有效期不同,Cookie 可設(shè)置為長時間保持,比如我們經(jīng)常使用的默認(rèn)登錄功能,Session 一般失效時間較短,客戶端關(guān)閉或者 Session 超時都會失效。
- 隱私策略不同,Cookie 存儲在客戶端,比較容易遭到不法獲取,早期有人將用戶的登錄名和密碼存儲在 Cookie 中導(dǎo)致信息被竊?。籗ession 存儲在服務(wù)端,安全性相對 Cookie 要好一些。
- 存儲大小不同, 單個 Cookie 保存的數(shù)據(jù)不能超過 4K,Session 可存儲數(shù)據(jù)遠高于 Cookie