瀏覽器存儲技術

cookie
cookie是指存儲在用戶本地終端上的數據,瀏覽器端會儲存你在這個站點的一些信息,比如登錄狀態,用戶ID,密碼、瀏覽過的網頁、停留的時間等信息,記錄在cookie裏,方便下次訪問時發送給服務器端。
cookie數據會自動在web瀏覽器和web服務器之間傳輸,也就是說HTTP請求發送時,會把保存在該請求域名下的所有cookie值發送給web服務器,因此服務器端腳本是可以讀、寫存儲在客戶端的cookie的操作,藉此維護用戶跟服務器會話中的狀態。
每個web服務器(域名)保存的cookie數不能超過50個,每個cookie保存的數據不能超過4KB。

cookie如何產生
1、在瀏覽器訪問服務器時由服務器返回一個Set-Cookie響應頭,當瀏覽器解析這個響應頭時設置cookie
2、通過瀏覽器js腳本設置cookie值
在js中設置cookie完整格式是:document.cookie="key=value[; expires=date][; domain=domain][; path=path][; secure]"
expires:設置cookie的生存時間,默認爲當然瀏覽器會話(Session)。當設置一個時間時,每次訪問瀏覽器會用當前時間和cookie的expries做比對,如果過期cookie則會被刪除。設置格式爲GMT時間格式。
domain:在瀏覽器讀取cookie的時候只有當cookie的domain和瀏覽器當然的域名匹配才能讀取到。默認情況下cookie的domain和當然訪問一樣。但是很多網址不止有一個域名比如:a.example.com和b.example.com如果他們想要共享cookie那麼cookie的domain需要設置爲domain=.example.com,path路徑需要設置爲path=/。這樣之後兩個域名都能同時訪問到cookie了。
path:path路徑和domain功能類似,只是path的範圍更小。path控制cookie在當前域名的路徑,只有路徑相匹配cookie才能被讀取到。

cookie的優點:能用於和服務器端通信;當cookie快要過期時,可以重新設置而不是刪除。
cookie的缺點:它會隨着http頭信息一起發送,增加了網絡流量(文檔傳輸的負載);它只能儲存少量的數據;它只能儲存字符串;有潛在的安全問題。

LocalStorage
本地存儲,解決了cookie存儲空間不足的問題(cookie中每條cookie的存儲空間爲4k),一般瀏覽器支持的是5M大小,這個在不同的瀏覽器中localStorage會有所不同。
localStorage用於持久化的本地存儲,除非主動刪除數據,否則數據是永遠不會過期的。
localStorage的優點:
1)localStorage拓展了cookie的4K限制;
2)localStorage會可以將第一次請求的數據直接存儲到本地,這個相當於一個5M大小的針對於前端頁面的數據庫,相比於cookie可以節約帶寬,但是這個卻是只有在高版本的瀏覽器中才支持的;
3)localStorage 方法存儲的數據沒有時間限制。第二天、第二週或下一年之後,數據依然可用。
localStorage的缺點:
1)瀏覽器的大小不統一,並且在IE8以上的IE版本才支持localStorage這個屬性;
2)目前所有的瀏覽器中都會把localStorage的值類型限定爲string類型,這個在對我們日常比較常見的JSON對象類型需要一些轉換;
3)localStorage在瀏覽器的隱私模式下面是不可讀取的;
4)localStorage本質上是對字符串的讀取,如果存儲內容多的話會消耗內存空間,會導致頁面變卡;
5)localStorage不能被爬蟲抓取到。

操作方法:對外的方法主要有: setItem,getItem,以鍵值對的形式存儲和讀取,key按照索引獲取當前存儲的key值,找不到時返回null,length屬性代表當前存儲的key,value對數

SessionStorage
用於臨時保存同一窗口(或標籤頁)的數據,在關閉窗口或標籤頁之後將會刪除這些數據。
特點:
1、單標籤頁限制。sessionStorage操作限制在單個標籤頁中,在此標籤頁進行同源頁面訪問都可以共享sessionStorage數據。
2、只在本地存儲。seesionStorage的數據不會跟隨HTTP請求一起發送到服務器,只會在本地生效,並在關閉標籤頁後清除數據。(若使用Chrome的恢復標籤頁功能,seesionStorage的數據也會恢復)。
3、存儲方式。seesionStorage的存儲方式採用key、value的方式。value的值必須爲字符串類型(傳入非字符串,也會在存儲時轉換爲字符串。true值會轉換爲"true")。
4、存儲上限限制:不同的瀏覽器存儲的上限也不一樣,但大多數瀏覽器把上限限制在5MB以下。

三者區別:
1)cookie數據始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和服務器間來回傳遞;而sessionStorage和localStorage不會自動把數據發給服務器,僅在本地保存;
2)cookie數據有路徑(path)的概念,可以限制cookie只屬於某個路徑下;
3)存儲大小限制也不同,cookie數據不能超過4k,同時因爲每次http請求都會攜帶cookie,所以cookie只適合保存很小的數據,如會話標識;sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大;
4)數據有效期不同,sessionStorage:僅在當前瀏覽器窗口關閉前有效,自然也就不可能持久保持;localStorage:始終有效,窗口或瀏覽器關閉也一直保存,因此用作持久數據;cookie只在設置的cookie過期時間之前一直有效,即使窗口或瀏覽器關閉;
5)作用域不同,sessionStorage不在不同的瀏覽器窗口中共享,即使是同一個頁面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的;
6)Web Storage 支持事件通知機制,可以將數據更新的通知發送給監聽者;Web Storage 的 api 接口使用更方便。
發佈了27 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章