常見的瀏覽器存儲方式(cookie、localStorage、sessionStorage)
今天我們從前端的角度了解一下瀏覽器存儲,我們常見且常用的存儲方式主要由兩種:cookie、webStorage(localStorage和sessionStorage)。下面我們來一一認識它們。
Cookie基于HTTP規(guī)范,用來識別用戶。
Cookie是服務(wù)器發(fā)送到瀏覽器的一小段數(shù)據(jù),會在瀏覽器下次向同一服務(wù)器再發(fā)起請求時被攜帶并發(fā)送到服務(wù)器上。
Cookie誕生之初的作用就是解決HTTP的無狀態(tài)請求,用來記錄一些用戶相關(guān)的一些狀態(tài)。
•會話狀態(tài)管理(如用戶登錄狀態(tài)、購物車、游戲分?jǐn)?shù)或其它需要記錄的信息)
•個性化設(shè)置(如用戶自定義設(shè)置、主題等)
•瀏覽器行為跟蹤(如跟蹤分析用戶行為等)
因為一些前端交互的需要,后來cookie也被用于存儲一些客戶端的數(shù)據(jù)。
Cookie的原生api不友好,需要自行封裝一下。下面是封裝后的方法。
創(chuàng)建cookie
/** * @description js原生設(shè)置cookie * @param {String} name 給你要設(shè)置的cookie起個名字(key) * @param {String} value cookie的具體內(nèi)容(value) * @param {String} expiredays 設(shè)置cookie的過期時間,單位:天 */ function setCookie(name, value, expiredays) { var exdate=new Date(); exdate.setDate(exdate.getDate() + expiredays); document.cookie = name + '=' + escape(value)+ ((expiredays == null) ? '' : ';expires=' +exdate.toGMTString()); }
獲取cookie
/** * @description js原生獲取cookie方法1 * @param {String} name 你要獲取的cookie名 */ function getCookie(name) { if (document.cookie.length > 0) { var start = document.cookie.indexOf(name + '='); if (start !== -1) { start = start + name.length + 1; var end = document.cookie.indexOf(';', start); if (end === -1) { end = document.cookie.length; return unescape(document.cookie.substring(start, end)); } } } return ''; } /** * @description js原生獲取cookie方法2 * @param {String} name 你要獲取的cookie名 */ function getCookie(name) { var cookieArr = document.cookie.split(';') || []; if(!cookieArr.length){ return ''; } for(var i = 0; i < cookieArr.length; i ++){ var key = $.trim(cookieArr[i]).split('=')[0]; var value = $.trim(cookieArr[i]).split('=')[1]; if(key === name){ return value; } } }
檢查cookie是否已存在
function checkCookie() { username = getCookie('username'); if (username !== null && username !== '') { alert('Welcome again ' + username + '!'); } else { username = prompt('Please enter your name:', ''); if (username !== null && username !== '') { setCookie('username',username,365); } } }
jquery.cookie.js封裝的cookie設(shè)置方法:
創(chuàng)建cookie
/** * 'name', cookie命名 * 'value',cookie的值 * { * expires: 7, // cookie有效期,單位天;默認值:會話cookie,關(guān)閉瀏覽器cookie失效。 * path: '/', // cookie影響到的路徑;值為'/',表示設(shè)置cookie在整個域中可用;默認值:創(chuàng)建cookie的頁面路徑。 * domain: 'example.com', // 定義cookie有效的域。默認值:創(chuàng)建cookie的頁面域。 * secure: false, // 定義cookie安全性,默認值:false,設(shè)置為true,則cookie在http中是無效的,cookie的傳輸需要使用安全協(xié)議(https)。 * } */ $.cookie('name', 'value', { expires: 7, path: '/', domain: 'example.com', secure: false});
讀取cookie
$.cookie('name'); //name存在返回對應(yīng)value,不存在返回null
讀取所有可用的cookies:
$.cookie(); //{'name': value}
TODO:直接調(diào)用會報錯?
刪除cookie
//成功刪除cookie時返回true,否則返回false $.removeCookie('name'); // => true $.removeCookie('nothing'); // => false
注意:刪除cookie時,必須傳遞用于設(shè)置cookie的完全相同的路徑,域和安全選項,除非您依賴于默認選項。
即:設(shè)置cookie時如果設(shè)置了path屬性或secure屬性,刪除的時候要帶著這些屬性,否則無法成功刪除cookie。
// This won't work! $.removeCookie('name'); // => false // This will work! $.removeCookie('name', { path: '/' }); // => true TODO:$.removeCookie無效?
(jquery1.9.1.js + jquery.cookie.js,插件無重復(fù)引用的情況,$.removeCookie提示undefined)
webStorage基于HTML5規(guī)范
HTML5 提供了兩種在客戶端存儲數(shù)據(jù)的新方法:localStorage和sessionStorage,掛載在window對象下。
webStorage是本地存儲,數(shù)據(jù)不是由服務(wù)器請求傳遞的。從而它可以存儲大量的數(shù)據(jù),而不影響網(wǎng)站的性能。
Web Storage的目的是為了克服由cookie帶來的一些限制,當(dāng)數(shù)據(jù)需要被嚴(yán)格控制在客戶端上時,無須持續(xù)地將數(shù)據(jù)發(fā)回服務(wù)器。比如客戶端需要保存的一些用戶行為或數(shù)據(jù),或從接口獲取的一些短期內(nèi)不會更新的數(shù)據(jù),我們就可以利用Web Storage來存儲。
localStorage的生命周期是永久性的。localStorage存儲的數(shù)據(jù),即使關(guān)閉瀏覽器,也不會讓數(shù)據(jù)消失,除非主動的去刪除數(shù)據(jù)。如果 想設(shè)置失效時間,需自行封裝。
sessionStorage 的生命周期是在瀏覽器關(guān)閉前。
特性:
•關(guān)閉瀏覽器sessionStorage 失效;
•頁面刷新不會消除數(shù)據(jù);
•只有在當(dāng)前頁面打開的鏈接,才可以訪sessionStorage的數(shù)據(jù),使用window.open打開頁面和改變localtion.href方式都可以獲 取到
sessionStorage內(nèi)部的數(shù)據(jù);
存儲方式 |
作用與特性 |
存儲數(shù)量及大小 |
api |
cookie |
● 存儲用戶信息,獲取數(shù)據(jù)需要與服務(wù)器建立連接。 ● 可存儲的數(shù)據(jù)有限,且依賴于服務(wù)器,無需請求服務(wù)器的數(shù)據(jù)盡量不要存放在cookie中,以免影響頁面性能。 ● 可設(shè)置過期時間。 |
● 最好將cookie控制在4095B以內(nèi),超出的數(shù)據(jù)會被忽略。 ● IE6或更低版本最多存20個cookie; IE7及以上版本最多可以有50個;Firefox最多50個;chrome和Safari沒有做硬性限制。 |
原生、$.cookie(詳見上文) |
localStorage |
● 存儲客戶端信息,無需請求服務(wù)器。 ● 數(shù)據(jù)永久保存,除非用戶手動清理客戶端緩存。 ● 開發(fā)者可自行封裝一個方法,設(shè)置失效時間。
|
5M左右,各瀏覽器的存儲空間有差異。(感興趣的同學(xué)可以自己試一下)。 |
// 保存數(shù)據(jù)到 localStorage localStorage.setItem('key', 'value'); // 從 localStorage 獲取數(shù)據(jù) let data = localStorage.getItem('key'); // 從 localStorage 刪除保存的數(shù)據(jù) localStorage.removeItem('key'); // 從 localStorage 刪除所有保存的數(shù)據(jù) localStorage.clear(); |
sessionStorage |
● 存儲客戶端信息,無需請求服務(wù)器。 ● 數(shù)據(jù)保存在當(dāng)前會話,刷新頁面數(shù)據(jù)不會被清除,結(jié)束會話(關(guān)閉瀏覽器、關(guān)閉頁面、跳轉(zhuǎn)頁面)數(shù)據(jù)失效。
|
同localStorage |
// 保存數(shù)據(jù)到 sessionStorage sessionStorage.setItem('key', 'value'); // 從 sessionStorage 獲取數(shù)據(jù) let data = sessionStorage.getItem('key'); // 從 sessionStorage 刪除保存的數(shù)據(jù) sessionStorage.removeItem('key'); // 從 sessionStorage 刪除所有保存的數(shù)據(jù) sessionStorage.clear(); |
總結(jié):
以上所述是小編給大家介紹的常見的瀏覽器存儲方式(cookie、localStorage、sessionStorage),希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
相關(guān)文章
JavaScript使用AOP編程思想實現(xiàn)監(jiān)聽HTTP請求
這篇文章主要為大家詳細介紹了如何在JavaScript使用AOP編程思想實現(xiàn)監(jiān)聽HTTP請求,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02JS控制頁面跳轉(zhuǎn)時未請求要跳轉(zhuǎn)的地址怎么回事
在js中通過window.location.href控制頁面跳轉(zhuǎn)時,有時會跳轉(zhuǎn)至緩存頁面,并沒有真正去請求要跳轉(zhuǎn)的地址,導(dǎo)致頁面數(shù)據(jù)未能及時加載刷新。怎么解決呢?下面小編給大家解答下2016-10-10JS常見DOM節(jié)點操作示例【創(chuàng)建 ,插入,刪除,復(fù)制,查找】
這篇文章主要介紹了JS常見DOM節(jié)點操作,結(jié)合實例形式分析了JavaScript針對DOM節(jié)點的創(chuàng)建 ,插入,刪除,復(fù)制,查找等操作相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下2018-05-05JavaScript獲取移動設(shè)備型號的實現(xiàn)代碼(JS獲取手機型號和系統(tǒng))
這篇文章主要介紹了JavaScript獲取移動設(shè)備型號的實現(xiàn)代碼,需要的朋友可以參考下2018-03-03