儲存(cookie、localStorage、sessionStorage)
cookie實際上就是一些資訊,這些資訊以檔案的形式儲存在客戶端計算機上。當用戶訪問了某個網站,可以通過cookie向訪問者電腦上儲存資料。
cookie的作用
在瀏覽器中進行資料的儲存,使用者名稱、密碼(儲存資訊,並與伺服器互動)
cookie的特性
1.必須執行在伺服器的環境下(開啟伺服器)
2.cookie的容量: 5kb
3.cookie儲存的資料型別: 字串
4.cookie存放以域名形式區分的:一個域名下存放的cookie的個數是有限制的,不同瀏覽器存放的個數不一樣,cookie能儲存的條目數為:50條。
5.Cookie預設是臨時儲存的,當瀏覽器關閉時,自動銷燬:如果想長時間存放一個cookie,同時需要設定一個過期時間。
cookie的缺點
1.cookie可能被禁用:當用戶非常注重個人隱私保護時,他很可能禁用瀏覽器的cookie功能;
2.cookie是與瀏覽器相關的:這意味著即使訪問的是同一個頁面,不同瀏覽器之間所儲存的cookie也是不能互相訪問的;
3.cookie可能被刪除:因為每個cookie都是硬碟上的一個檔案,因此很有可能被使用者刪除;
4.cookie安全性不夠高:所有的cookie都是以純文字的形式記錄於檔案中,因此如果要儲存使用者名稱密碼等資訊時,最好事先經過加密處理。
建立與獲取cookie
//設定和讀取cookie document.cookie = "username=value";//獲取cookie檔案的內容 //事實上cookie檔案中存放的就是一個字串,而這個字串包含了當前網站目錄下的所有cookie的名字和值。因此,在獲取指定的cookie時,還需要使用String物件中的方法才能獲得需要的cookie值。 //cookie的生存期 document.cookie = "名稱=值;expires="+ 時間; //(時間必須是一個字串) var d= new Date(); d.setHours(d.getHours() + (24 * 30)); //儲存一個月 document.cookie = "visited=yes; expires=" + d.toUTCString();
Web Storage
可以讓 Web 頁面在客戶端瀏覽器中以鍵值對的形式在本地儲存資料。 這些資料可以是臨時的(瀏覽器一關就自動刪除),或者是長期存在的(無論多少天之後開啟網站,仍然可以訪問這些資料)
localStorage(window.localStorage)
本地儲存,用於持久化的本地儲存,除非主動刪除資料,否則資料是永遠不會過期的。
API
//在本地儲存中以key鍵/值的方式儲存資料 localStorage.setItem(“keyname”,value); localStorage.keyname = value; localStorage['keyname'] = value; //獲取本地儲存的值 localStorage.getItem(“keyname”) localStorage.keyname localStorage['keyname'] //刪除指定key本地儲存的值 localStorage.removeItem(“keyname”); //清空網站在本地儲存的所有的資料 localStorage.clear();
sessionStorage(window.sessionStorage)
會話儲存,用於本地儲存一個會話 (session)中的資料,這些資料當在關閉瀏覽器後資料也隨之銷燬。
localStorage、sessionStorage與cookie的區別
1.同源限制
cookie資料始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和伺服器間來回傳遞。而sessionStorage和localStorage不會自動把資料發給伺服器,僅在本地儲存。cookie資料還有路徑(path)的概念,可以限制cookie只屬於某個路徑下。
//如果兩個網頁一級域名相同,只是次級域名不同,瀏覽器允許通過設定document.domain共享 Cookie。(這種方法只適用於 Cookie 和 iframe 視窗,LocalStorage 和 IndexedDB 無法通過這種方法) A:http://w1.example.com/a.html B:http://w2.example.com/b.html //那麼只要設定相同的document.domain,兩個網頁就可以共享 Cookie。因為瀏覽器通過document.domain屬性來檢查是否同源。 //A 和 B 兩個網頁都需要設定document.domain屬性,才能達到同源的目的。因為設定document.domain的同時,會把埠重置為null // 兩個網頁都需要設定 document.domain = 'example.com'; //A網頁:設定cookie document.cookie = "test1=hello"; //B網頁:讀取到A網頁的這個cookie var allCookie = document.cookie;
通過window.postMessage
,讀寫其他視窗的 LocalStorage 也成為了可能。
2.儲存大小
cookie資料不能超過4k,同時因為每次http請求都會攜帶cookie,所以cookie只適合儲存很小的資料,如會話標識。sessionStorage和localStorage 雖然也有儲存大小的限制,但比cookie大得多,可以達到5M或更大。
3.有效期
sessionStorage:僅在當前瀏覽器視窗關閉前有效,自然也就不可能持久保持;localStorage:始終有效,視窗或瀏覽器關閉也一直儲存,因此用作持久資料;cookie只在設定的cookie過期時間之前一直有效,即使視窗或瀏覽器關閉。
4.作用域
sessionStorage不在不同的瀏覽器視窗中共享,即使是同一個頁面;localStorage 在所有同源視窗中都是共享的;cookie也是在所有同源視窗中都是共享的。
5.事件通知機制
Web Storage 支援事件通知機制,可以將資料更新的通知傳送給監聽者。
6.API