1. 程式人生 > >簡單介紹瀏覽器端的幾種儲存技術

簡單介紹瀏覽器端的幾種儲存技術

這個問題經常會被問到,在這裡簡單總結一下~

1、Cookie

cookie是什麼:cookie是指儲存在使用者本地終端上的資料,同時它是與具體的web頁面或者站點相關的。cookie資料會自動在web瀏覽器和web伺服器之間傳輸,也就是說HTTP請求傳送時,會把儲存在該請求域名下的所有cookie值傳送給web伺服器,因此伺服器端指令碼是可以讀、寫儲存在客戶端的cookie的操作。

cookie的有效期:cookie預設情況下的有效期是很短暫的,一旦使用者關閉瀏覽器,cookie儲存的資料就會丟失。如果想要延長cookie的有效期,可以通過設定HTTP頭資訊中的cache-control屬性的max-age值,或者修改HTTP頭資訊中的expires屬性的值來延長有效期。


cookie的作用域:它是通過文件源和文件路徑來確定的。該作用域通過cookie的path和domain屬性也是可配置的。預設情況下,cookie和建立它的web頁面有關,並對該頁面以及和該頁面同目錄或者子目錄的其他頁面可見。有時候,你可能希望讓整個網站都能夠使用cookie的值,而不管是哪個頁面建立它。要滿足這樣的需求可以設定cookie的路徑(設定cookie的path屬性)。cookie的作用域預設由文件源限制。但是,有的大型網站想要子域之間能夠互相共享cookie。

cookie的數目和大小的限制:每個web伺服器(域名)儲存的cookie數不能超過50個,每個cookie儲存的資料不能超過4KB,如果超過了4KB(IE6大約只能儲存2K)

,伺服器會處理不了。

cookie的優點:能用於和伺服器端通訊;當cookie快要過期時,可以重新設定而不是刪除。

cookie的缺點:它會隨著http頭資訊一起傳送,增加了網路流量(文件傳輸的負載);它只能儲存少量的資料;它只能儲存字串;有潛在的安全問題。

另外,自從有了Web Storage API(Local and Session Storage),cookie就不被推薦用於儲存資料了~

2、LocalStorage

localStorage是什麼:在HTML5中,新加入了一個localStorage特性,這個特性主要是用來作為本地儲存來使用的,解決了cookie儲存空間不足的問題(cookie中每條cookie的儲存空間為4k),localStorage中一般瀏覽器支援的是5M大小,這個在不同的瀏覽器中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不能被爬蟲抓取到。

3、SessionStorage

sessionStoragelocalStorage的唯一一點區別就是localStorage屬於永久性儲存,而sessionStorage屬於當會話結束的時候,sessionStorage中的鍵值對就會被清空。

4、UserData、GlobalStorage、Google Gear

這三種的使用都有一定的侷限性,例如userData是IE瀏覽器專屬,它的容量可以達到640K,這種方案可靠,不需要安裝額外外掛,只不過它僅在IE下有效~

globalStorage適用於Firefox 2+的瀏覽器,類似於IE的userData~

google gear是谷歌開發出的一種本地儲存技術,需要安裝Gear元件。

5、Flash ShareObject

這種方式能能解決上面提到的cookie儲存的兩個弊端,而且能夠跨瀏覽器,應該說是目前最好的本地儲存方案。不過,需要在頁面中插入一個Flash,當瀏覽器沒有安裝Flash控制元件時就不能用了。所幸的是,沒有安裝Flash的使用者極少。

強調一下:cookie,localStorage和sessionStorage的異同:

共同點:都是儲存在瀏覽器端,且同源的。

區別:

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 介面使用更方便。