Cookie和Session
1.保持狀態(tài):Cookie保存在客戶端惹谐,Session保存在服務端
2.使用方式:
(1)Cookie機制:Cookie分為兩種情況:如果不在瀏覽器中設置Cookie的過期時間持偏,那么Cookie保存在內存中,關閉瀏覽器Cookie的生命周期就結束了氨肌,如果設置了Cookie的過期時間鸿秆,那么就會存在硬盤里,關閉瀏覽器仍會存在怎囚,到期之后才會消失
(2)Session機制:當服務器收到請求需要創(chuàng)建session對象時卿叽,首先會檢查客戶端請求中是否包含sessionid。如果有sessionid恳守,服務器將根據該id返回對應session對象考婴。如果客戶端請求中沒有sessionid,服務器會創(chuàng)建新的session對象催烘,并把sessionid在本次響應中返回給客戶端沥阱。通常使用cookie方式存儲sessionid到客戶端,在交互中瀏覽器按照規(guī)則將sessionid發(fā)送給服務器伊群。如果用戶禁用cookie喳钟,則要使用URL重寫,可以通過response.encodeURL(url) 進行實現在岂;API對encodeURL的結束為奔则,當瀏覽器支持Cookie時,url不做任何處理蔽午;當瀏覽器不支持Cookie的時候易茬,將會重寫URL將SessionID拼接到訪問地址后。
3.存儲內容:cookie只能保存字符串類型,以文本的方式抽莱;session通過類似與Hashtable的數據結構來保存范抓,能支持任何類型的對象(session中可含有多個對象)
4.存儲的大小:cookie:單個cookie保存的數據不能超過4kb食铐;session大小沒有限制匕垫。
5.安全性:
cookie:針對cookie所存在的攻擊:Cookie欺騙,Cookie截獲虐呻;session的安全性大于cookie象泵。
原因如下:
(1)sessionID存儲在cookie中,若要攻破session首先要攻破cookie斟叼;
(2)sessionID是要有人登錄偶惠,或者啟動session_start才會有,所以攻破cookie也不一定能得到sessionID朗涩;
(3)第二次啟動session_start后找岖,前一次的sessionID就是失效了实撒,session過期后蛙吏,sessionID也隨之失效洲赵。
(4)sessionID是加密的
(5)綜上所述,攻擊者必須在短時間內攻破加密的sessionID识腿,這很難出革。
6.應用場景:
Cookie:
(1)判斷用戶是否登陸過網站,以便下次登錄時能夠實現自動登錄(或者記住密碼)覆履。如果我們刪除Cookie蹋盆,則每次登錄必須從新填寫登錄的相關信息。
(2)保存上次登錄的時間等信息硝全。
(3)保存上次查看的頁面
(4)瀏覽計數
Session:Session用于保存每個用戶的專用信息栖雾,變量的值保存在服務器端,通過SessionID來區(qū)分不同的客戶伟众。
(1)網上商城中的購物車
(2)保存用戶登錄信息
(3)將某些數據放入Session中析藕,供同一用戶的不同頁面使用
(4)防止用戶非法登錄
7.缺點:
Cookie:
(1)大小受限
(2)用戶可以操作(禁用)cookie,使功能受限
(3)安全性較低
(4)有些狀態(tài)不可能保存在客戶端凳厢。
(5)每次訪問都要傳送cookie給服務器账胧,浪費帶寬。
(6)cookie數據有路徑(path)的概念先紫,可以限制cookie只屬于某個路徑下治泥。
Session:
(1)Session保存的東西越多,就越占用服務器內存遮精,對于用戶在線人數較多的網站居夹,服務器的內存壓力會比較大败潦。
(2)依賴于cookie(sessionID保存在cookie),如果禁用cookie准脂,則要使用URL重寫劫扒,不安全
(3)創(chuàng)建Session變量有很大的隨意性,可隨時調用狸膏,不需要開發(fā)者做精確地處理沟饥,所以,過度使用session變量將會導致代碼不可讀而且不好維護湾戳。
Cookie和Localstorage贤旷、SessionStorage
Localstorage和SessionStorage是HTML5提出的Web Storage新概念。
LocalStorage是永久性存儲院塞,除非主動刪除遮晚。
SessionStorage是暫時性存儲性昭,關閉頁面即刪除拦止。
Cookie和LocalStorage的區(qū)別:
- Cookie大小限制為4KB,而LocalStorage是5MB
- Cookie每次請求都發(fā)送給服務器糜颠,LocalStorage存儲本地汹族,降低服務器壓力。
- LocalStorage不會隨請求發(fā)送到服務器其兴,不存在被截取的安全性問題顶瞒,但是還是有被偽造的問題。
-
LocalStorage提供了一些原生方法元旬,比Cookie方便榴徐。
setItem (key, value) —— 保存數據,以鍵值對的方式儲存信息匀归。
getItem (key) —— 獲取數據坑资,將鍵值傳入,即可獲取到對應的value值穆端。
removeItem (key) —— 刪除單個數據袱贮,根據鍵值移除對應的信息。
clear () —— 刪除所有的數據
key (index) —— 獲取某個索引的key
2.LocalStorage是字符串存儲体啰,對象可以使用JSON的stringify()和parse()方法和字符串互換攒巍。
區(qū)別
參考:
[1].[# cookies、sessionStorage和localStorage解釋及區(qū)別
](https://www.cnblogs.com/pengc/p/8714475.html