[cookies和session的區別|青训营笔记]

51 阅读2分钟

Session和cookie都是用來跟蹤瀏覽器用戶身份的會話方式,但是兩者有很大的區別。

數據的存儲位置有區別,cookie保存在瀏覽器端,session保存在服務端。兩者的使用方式也有區別,Cookie是服務器發給客戶端的特殊信息,cookie以文本的方式保存在客戶端,每次請求的時候都會帶上cookie。

當服務器收到請求需要創建session對象時,首先會檢查客戶端請求中是否包含sessionid。如果有,服務器將根據這個id返回對應的session對象。如果沒有,服務器就會創建新的session對象,並把sessionid在本次響應中返回給客戶端。

通常使用cookie方式儲存sessionid到客戶端,在交互中瀏覽器按照規則將sessionid發送給服務器。如果用戶禁用cookie,則要使用URL重寫,可以通過response.encodeURL(url)進行實現;API對encodeURL的結束為,當瀏覽器支持Cookie時,url不做任何處理;當瀏覽器不支持Cookie時,將會重寫URL,並將SessionID拼接到訪問地址的後面。

他們的存儲大小也有區別,單個cookie的保存數據不能超過4kb,session的大小沒有限制。

存儲的內容也有區別,cookie只能以文本的方式保存為字符串類型,session通過類似于Hashtable的數據結構來保存,能支持任何類型的對象(session中可含有多個對象)

兩者的安全性也是不一樣的,對Cookie進行欺騙和截獲都是非常容易實現的,因此session的安全性要大於cookie。

SessionID存儲在cookie中,要攻破session首先要攻破cookie。SessionID是需要有人登錄後,或者啟動session_start才會有,所有攻破cookie也不一定能夠得到sessionID。第二次啟動session_start後,前一次的sessionID就是失效了,session過期後,sessionID也隨之失效。SessionID是加密的。

綜上,攻擊者如果需要再短時間攻破加密的sessionID,是一件困難的事情。