HTTP協(xié)議中Cookie和Session的區(qū)別是什么?
HTTP協(xié)議是一種無狀態(tài)協(xié)議,即每次服務(wù)端接收到客戶端的請求時,都是一個全新的請求,服務(wù)器并不知道客戶端的歷史請求記錄。Cookie和Session都是用來跟蹤瀏覽器用戶身份的會話方式,目的就是為了彌補HTTP的無狀態(tài)特性。
Cookie是服務(wù)器發(fā)送到用戶瀏覽器并保存在本地的一小塊數(shù)據(jù),它會在瀏覽器下次向同一服務(wù)器再發(fā)起請求時被攜帶。
Cookie中保存已經(jīng)登錄過的用戶信息,下次訪問網(wǎng)站的時候,頁面可以自動填寫登錄的一些基本信息。通常,它用于告知服務(wù)端兩個請求是否來自于同一瀏覽器,如保持用戶的登錄狀態(tài)。此外,Cookie還能保存用戶首選項,主題和其他設(shè)置信息。
Session的作用是通過服務(wù)端記錄用戶的狀態(tài)。一般我們會使用Cookie來管理Session,服務(wù)器第一次接收到請求時,生成一個Session ID ,通過響應(yīng)頭的Set-Cookie命令設(shè)置Session ID字段,并向客戶端發(fā)送要求設(shè)置Cookie的響應(yīng)??蛻舳耸盏巾憫?yīng)后,在本機保存一個包含Session ID字段的Cookie信息,接下來客戶端每次向同一服務(wù)器發(fā)送請求時,請求頭都會帶上包含該Session ID的Cookie,然后服務(wù)器通過讀取請求頭中的Cookie,獲取到此次請求的Session ID。
需要注意的是,如果客戶端禁用了Cookie,通過Cookie保存Session ID的方式就無法使用了,這時我們也可以把Session ID放在請求的URL里面,考慮到安全性,我們還可以對Session ID進行加密。
整體上看,Cookie和Session存在5點區(qū)別:
1.存放位置不同,Cookie 數(shù)據(jù)保存在客戶端瀏覽器上,而Session 數(shù)據(jù)保存在服務(wù)器上。
2. 安全性不同,Cookie存放在本地瀏覽器上,可以對其進行偽造從而進行Cookie欺騙,所以相對來說,Session安全性更高。
3. 存儲數(shù)據(jù)大小不同,單個Cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個站點最多保存20個Cookie,而Session則存儲于服務(wù)端,瀏覽器對其沒有限制。
4. 數(shù)據(jù)類型不同, Cookie 只支持存儲字符串數(shù)據(jù),而 Session 可以存儲任意數(shù)據(jù)類型。
5. 有效期不同,Cookie 可設(shè)置為長時間保持,比如我們經(jīng)常使用的自動登錄功能,Session 一般生效時間較短,客戶端關(guān)閉或者 Session 超時都會失效。