【Vue】瀏覽器緩存 sessionStorage、localStorage、Cookie

嘿,各位 Vue 開發者們!今天咱們來好好聊聊瀏覽器里的三種緩存方式:sessionStoragelocalStorageCookie。在實際開發中,合理運用這些緩存能讓我們的應用性能大幅提升,同時避免一些不必要的問題。下面就跟著我的筆記,一起來深入了解它們吧!

一、概述

在 Web 開發里,緩存是個非常重要的概念。它能幫助我們減少對服務器的請求,提高頁面的加載速度,增強用戶體驗。而 sessionStoragelocalStorageCookie 就是瀏覽器為我們提供的幾種本地緩存機制。

1. sessionStorage

sessionStorage 是 HTML5 新增的一個會話存儲對象,它用于臨時保存同一窗口(或標簽頁)的數據,在關閉窗口或標簽頁后數據就會被清除。

2. localStorage

localStorage 同樣是 HTML5 新增的一個會話存儲對象,它用于長期保存數據,除非手動刪除,否則數據不會過期。

3. Cookie

Cookie 是在 Web 服務器和瀏覽器之間傳遞的小段數據,它會在客戶端和服務器之間來回傳遞,可設置過期時間。

二、使用方法

1. sessionStorage

存儲數據
// 在 Vue 組件中使用
export default {methods: {setSessionData() {sessionStorage.setItem('username', 'John');}}
}
獲取數據
export default {methods: {getSessionData() {const username = sessionStorage.getItem('username');console.log(username);}}
}
刪除數據
export default {methods: {removeSessionData() {sessionStorage.removeItem('username');}}
}
清空所有數據
export default {methods: {clearSessionData() {sessionStorage.clear();}}
}

2. localStorage

存儲數據
export default {methods: {setLocalData() {localStorage.setItem('email', 'john@example.com');}}
}
獲取數據
export default {methods: {getLocalData() {const email = localStorage.getItem('email');console.log(email);}}
}
刪除數據
export default {methods: {removeLocalData() {localStorage.removeItem('email');}}
}
清空所有數據
export default {methods: {clearLocalData() {localStorage.clear();}}
}

3. Cookie

存儲數據
function setCookie(name, value, days) {let expires = "";if (days) {const date = new Date();date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));expires = "; expires=" + date.toUTCString();}document.cookie = name + "=" + (value || "") + expires + "; path=/";
}export default {methods: {setCookieData() {setCookie('user_id', '123', 7);}}
}
獲取數據
function getCookie(name) {const nameEQ = name + "=";const ca = document.cookie.split(';');for (let i = 0; i < ca.length; i++) {let c = ca[i];while (c.charAt(0) === ' ') c = c.substring(1, c.length);if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);}return null;
}export default {methods: {getCookieData() {const userId = getCookie('user_id');console.log(userId);}}
}
刪除數據
function deleteCookie(name) {document.cookie = name + '=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}export default {methods: {deleteCookieData() {deleteCookie('user_id');}}
}

三、區別與適用場景

1. 區別

特性sessionStoragelocalStorageCookie
數據有效期窗口或標簽頁關閉即清除除非手動刪除,否則不過期可設置過期時間
數據大小一般為 5MB一般為 5MB一般為 4KB
數據傳遞不參與服務器通信不參與服務器通信會在客戶端和服務器之間來回傳遞
作用域僅在同一窗口(或標簽頁)有效在同一瀏覽器內共享在同一域名下有效

2. 適用場景

  • sessionStorage:適用于臨時保存同一窗口(或標簽頁)的數據,如表單數據、臨時狀態等。
  • localStorage:適用于長期保存數據,如用戶偏好設置、緩存數據等。
  • Cookie:適用于需要在客戶端和服務器之間傳遞數據的場景,如用戶登錄狀態、用戶身份驗證等。

四、避坑指南

1. 數據類型問題

sessionStoragelocalStorage 只能存儲字符串類型的數據。如果要存儲對象或數組,需要先使用 JSON.stringify() 進行序列化,獲取時再使用 JSON.parse() 進行反序列化。

// 存儲對象
const user = { name: 'John', age: 30 };
localStorage.setItem('user', JSON.stringify(user));// 獲取對象
const storedUser = JSON.parse(localStorage.getItem('user'));
console.log(storedUser);

2. Cookie 安全問題

由于 Cookie 會在客戶端和服務器之間來回傳遞,所以要注意防止 Cookie 被篡改或竊取。可以通過設置 HttpOnlySecure 屬性來提高 Cookie 的安全性。

// 設置 HttpOnly 和 Secure 屬性的 Cookie
document.cookie = 'user_id=123; path=/; HttpOnly; Secure';

3. 兼容性問題

雖然 sessionStoragelocalStorage 是 HTML5 新增的特性,但大多數現代瀏覽器都支持。在使用時,最好先檢查瀏覽器是否支持這些特性。

if (typeof(Storage) !== "undefined") {// 支持 localStorage 和 sessionStoragelocalStorage.setItem('test', 'test value');
} else {// 不支持console.log('Your browser does not support Web Storage.');
}

五、總結

sessionStoragelocalStorageCookie 各有優缺點,在實際開發中要根據具體需求選擇合適的緩存方式。合理運用這些緩存機制,能讓我們的 Vue 應用更加高效、穩定。希望這篇筆記能幫助大家更好地理解和使用這些瀏覽器緩存,避免一些常見的問題。

以上就是關于 Vue 中使用 sessionStoragelocalStorageCookie 的詳細介紹,大家有什么問題歡迎在評論區留言討論!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914655.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914655.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914655.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c#如何將不同類型的數據存儲到一起

在 C# 中&#xff0c;存儲不同類型的數據有多種方式&#xff0c;具體選擇取決于你的需求&#xff08;類型安全、性能、靈活性等&#xff09;。以下是常見的解決方案及其適用場景&#xff1a;1. 使用 object 類型&#xff08;裝箱 / 拆箱&#xff09;將所有數據轉換為基類 objec…

超唯美治愈風卡通插畫PPT模版

海洋卡通風治愈系PPT模版&#xff0c;兒童可愛治愈可愛PPT模版&#xff0c;治愈風商務通用PPT模版&#xff0c;治愈系課件PPT模版&#xff0c;治愈風插畫PPT模版&#xff0c;超唯美治愈風PPT模版&#xff0c;可愛插畫治愈系女孩PPT模版 超唯美治愈風卡通插畫PPT模版&#xff1a…

el-tooltip 快速滾動的時候出現殘影如何解決 vue3

<el-tooltip:disabled"isScrolling" <!-- 新增滾動狀態綁定 -->:popper-options"{ modifiers: [{ name: computeStyles, options: { adaptive: false }] }"effect"dark":content"label.name"placement"right-start"…

【經典面經】C++新特性 TCP完整收發數據 TLS1.2 TLS1.3

文章目錄cpp新特性C11C14C17C20tcp如何保證完整收發數據結論1. **面向連接的三次握手**2. **字節序號與確認機制**3. **校驗和&#xff08;Checksum&#xff09;**4. **超時重傳與快速重傳**5. **滑動窗口&#xff08;流量控制&#xff09;**6. **數據重組與排序**7. **四次揮手…

Spring AI 系列之十一 - RAG-進階RetrievalAugmentationAdvisor

之前做個幾個大模型的應用&#xff0c;都是使用Python語言&#xff0c;后來有一個項目使用了Java&#xff0c;并使用了Spring AI框架。隨著Spring AI不斷地完善&#xff0c;最近它發布了1.0正式版&#xff0c;意味著它已經能很好的作為企業級生產環境的使用。對于Java開發者來說…

[TOOL] ubuntu 使用 ffmpeg 操作 gif、mp4

文章目錄一、工具安裝二、gif 轉mp4三、mp4 兩倍速一、工具安裝 安裝 ffmpeg 工具&#xff1a; sudo apt install ffmpeg二、gif 轉mp4 1. 配置環境 核心指令: ffmpeg -i input.mp4 -filter_complex "[0:v]setpts0.5*PTS[v];[0:a]atempo2.0[a]" -map "[v]&q…

linux中INIT_MM_CONTEXT宏對pgd的重復賦值

在GNU C中&#xff0c;支持通過標號元素對指定結構體成員名進行初始化&#xff0c;這允許初始化值以任意順序出現。在linux內核中對init_mm初始化時有如下代碼。#define INIT_MM_CONTEXT(name) \.pgd init_pg_dir,struct mm_struct init_mm {.mm_rb RB_ROOT,.pgd swapper…

第十五章 STL(stack、queue、list、set、map容器使用)

棧stack使用&#xff1a;隊列queue雙向循環鏈表listlist構造函數list 賦值和交換list 大小操作list 插入和刪除list 數據存取list 反轉和排序排序算法sort降序操作排序案例#include<iostream> using namespace std; #include<list>class Person { private:string n…

【論文閱讀】HCCF:Hypergraph Contrastive Collaborative Filtering

論文出處&#xff1a;SIGIR 2022 CCF-A 論文地址&#xff1a;Hypergraph Contrastive Collaborative Filtering 論文代碼&#xff1a;akaxlh/HCCF: HCCF, SIGIR 2022 目錄 摘要 介紹 研究背景與核心問題 現有方法局限性 HCCF的創新解決方案 技術優勢 定義與相關工作 …

Retrofit+RxJava:打造聲明式REST客戶端的藝術 —— 像點咖啡一樣調用API

目錄一、告別Callback地獄&#xff1a;聲明式編程的魅力1.1 傳統網絡請求的痛點1.2 Retrofit的聲明式革命二、Retrofit核心配置工廠2.1 構建Retrofit實例2.2 常用注解速查表三、RxJava響應式魔法3.1 鏈式調用優雅變身3.2 超能力操作符盤點四、實戰演練&#xff1a;構建天氣查詢…

【離線數倉項目】——任務調度與數據可視化實戰

摘要 本文主要圍繞離線數倉項目中的任務調度與數據可視化實戰展開&#xff0c;介紹了業務流程虛擬節點、離線數倉任務調度、數據可視化等方面的內容&#xff0c;涉及DataWorks和QuickBI等工具的使用&#xff0c;并提供了相關的博文參考和項目實戰域信息。 1. 任務調度管理實戰…

【視頻格式轉換】.264格式轉為mp4格式

背景 視頻格式轉換是多媒體處理中的常見需求&#xff0c;尤其在視頻編輯、存儲或跨平臺播放時。H.264&#xff08;即AVC&#xff09;是一種廣泛使用的視頻編碼標準&#xff0c;以其高壓縮率和良好兼容性著稱&#xff0c;但通常以容器格式&#xff08;如.264裸流文件&#xff0…

JAVA學習筆記 使用notepad++開發JAVA-003

目錄 1 前言 2 部署notepad的java開發環境 2.1 下載并安裝notepad 2.2 設置新建文件的語言 2.3 安裝NppExec插件 2.4 編寫JAVA腳本 2.5 設置腳本執行快捷鍵 2.6 效果測試 3 小結 1 前言 JAVA可以使用記事本來編寫代碼&#xff0c;但是這種方式效率十分低下。我們可以使…

Vue Router 完全指南:從入門到實戰,高效管理前端路由

前言在現代化的前端開發中&#xff0c;路由管理是構建單頁應用&#xff08;SPA&#xff09;的核心功能之一。Vue.js 作為主流的前端框架之一&#xff0c;提供了強大的官方路由庫Vue Router&#xff0c;幫助開發者高效管理頁面跳轉、動態加載、權限控制等關鍵需求。無論是構建企…

Sentinel熱點參數限流完整示例實現

Sentinel熱點參數限流完整示例實現 1. 添加Maven依賴 (pom.xml) <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.2.7.RELEASE</version> </depend…

正則表達式深度解析:從LeetCode 3136題說起

正則表達式深度解析&#xff1a;從LeetCode 3136題說起 引言 正則表達式&#xff08;Regular Expression&#xff0c;簡稱RegEx&#xff09;是一種強大的字符串匹配工具&#xff0c;在字符串處理、數據驗證、文本搜索等場景中有著廣泛的應用。本文將以LeetCode 3136題"有效…

映美打印機-URL頁面打印

<?php /** 打印 - 映美云 https://open.jolimark.com/doc/ */ namespace Home\Controller; use Admin\Logic\OrderLogic;class PrintController extends BaseController {private $appid "";private $appkey "";//打印機編號private $deviceIds &qu…

機器學習算法 ——XGBoost 的介紹和使用

前言&#xff1a; 最近在工作中遇到一個結構化數據回歸預測的問題&#xff0c;用到了很多回歸算法&#xff08;如多元線性回歸等&#xff09;都沒有很好的效果&#xff0c;于是使用了XGBoost&#xff0c;自己也沖三個特征參數人為的增加來幾個&#xff0c;訓練出來的效果還是很…

Linux操作系統之信號:保存與處理信號

目錄 前言&#xff1a; 前文回顧與補充&#xff1a; 信號的保存 PCB里的信號保存 sigset_t 信號集操作函數 信號的處理 信號捕捉的流程&#xff1a;?編輯 操作系統的運行原理 硬件中斷 時鐘中斷 死循環 軟中斷 總結&#xff1a; 前言&#xff1a; 在上一篇文…

Spring Boot 設置滾動日志logback

Spring Boot 的 logback 框架 Spring Boot 默認內置了 Logback 作為日志實現框架&#xff0c;只需要在resources文件夾下添加一個logback-spring.xml&#xff0c;springboot會按照你的設置自動開啟logback日志功能。 配置 logback-spring.xml 實現每天產生一個日志文件&#xf…