關於http協議中session和cookie的區別

我知乎上看到一個很簡介的總結,以爲寫得很是好,小結一下:php

image.png瀏覽器

image.png安全

關於cookie 來自其餘網頁的一些整理服務器

image.pngcookie

image.pngsession

本身抓包看了一下
當咱們第一次登陸一個網站的時候,服務器會經過http協議裏面setcookie的方式,給瀏覽器發放一個cookie(其實就是一個文件)ide

image.png性能

這就是瀏覽器保存的cookie
![Uploading image_435150.png . . .]網站

瀏覽器拿到cookie以後,以後的http請求就會帶上cookie。給瀏覽器標識出本身的身份。spa

2. 關於session

cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在服務器端保持狀態的方案。

當程序須要爲某個客戶端的請求建立一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識(稱爲session id),若是已包含則說明之前已經爲此客戶端建立過session,服務器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),若是客戶端請求不包含session id,則爲此客戶端建立一個session而且生成一個與此session相關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。

保存這個session id的方式能夠採用cookie,這樣在交互過程當中瀏覽器能夠自動的按照規則把這個標識發送給服務器。通常這個cookie的名字都是相似於SEEESIONID。但cookie能夠被人爲的禁止,則必須有其餘機制以便在cookie被禁止時仍然可以把session id傳遞迴服務器。

cookie 被禁止時的解決方案:
常常被使用的一種技術叫作URL重寫,就是把session id直接附加在URL路徑的後面。還有一種技術叫作表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時可以把session id傳遞迴服務器。好比:

<form name="testform" action="/xxx"> 
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> 
<input type="text"> 
</form>

實際上這種技術能夠簡單的用對action應用URL重寫來代替。

cookie 和session 的區別:一、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。二、cookie不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙考慮到安全應當使用session。三、session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能考慮到減輕服務器性能方面,應當使用COOKIE。四、單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie。

相關文章
相關標籤/搜索