0基础学前端系列 -- 前端的存储方式

news2024/11/30 6:24:00

前端存储方式全解析:选择最适合你的解决方案

在现代Web开发中,存储用户数据和状态信息是至关重要的。随着应用程序的复杂性增加,开发者需要选择合适的存储机制来管理用户信息。本文将深入探讨前端的存储方式,包括 SessionCookielocalStoragesessionStorageIndexedDB,帮助你理解它们的特点、用途及最佳应用场景。

1. Session(会话)

Session 是一种在用户与服务器之间保持状态的机制。它允许服务器在多个请求之间存储用户的数据,以便在用户的会话期间跟踪其状态。Session 通常用于存储用户的登录状态、购物车信息等。

特点

  • 服务器端存储:Session 数据存储在服务器上,而不是客户端。每个用户的会话数据会与一个唯一的会话ID关联。
  • 会话ID:当用户访问网站时,服务器会生成一个唯一的会话ID,并将其发送到客户端。客户端通常会将该ID存储在 cookie 中,以便在后续请求中发送回服务器。
  • 过期时间:Session 通常有一个过期时间,若在一定时间内没有活动,服务器会自动清除该会话数据。
  • 安全性:由于会话数据存储在服务器端,相对来说比存储在客户端的 cookie 更安全。

示例

假设用户登录到一个电商网站,服务器为该用户生成一个 Session ID,并将其存储在服务器上。每次用户进行购物或浏览时,都会通过 Session ID 来确认用户身份,确保用户的购物车信息不会丢失。

2. Cookie

Cookie 是一种在客户端存储小型数据的机制,通常用于保存用户的状态信息。

特点

  • 设置过期时间:可以设置过期时间,过期后 cookie 会被自动删除。
  • 指定主机:可以指定哪些主机可以访问该 cookie。
  • 大小限制:每个 cookie 的大小限制通常为 4KB。
  • 请求时携带:在每个 HTTP 请求中,相关的 cookie 会自动包含在请求头中发送给服务器。
  • 后端生成:通常由服务器生成并发送到客户端。

示例

当用户登录到网站时,服务器可以创建一个 cookie 来存储用户的登录状态。每次用户访问页面时,浏览器会自动将该 cookie 发送给服务器,从而保持用户登录状态。

// 设置一个 cookie
document.cookie = "username=Alice; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/";

3. localStorage

localStorage 是一种 Web 存储机制,允许在客户端存储数据。

特点

  • 没有过期时间:存储的数据不会过期,除非手动删除。
  • 大小限制:每个域名下的存储量通常为 5MB。
  • 只能存储字符串:存储的数据必须是字符串类型,如果需要存储对象,需要使用 JSON 序列化。
  • 同源策略:localStorage 遵循同源策略,即同一个源(协议、域名和端口)下的数据可以互相访问。

示例

你可以使用 localStorage 存储用户的偏好设置,比如主题颜色:

// 存储用户的主题设置
localStorage.setItem('theme', 'dark');

// 获取用户的主题设置
const theme = localStorage.getItem('theme');
console.log(theme); // 输出 "dark"

4. sessionStorage

sessionStorage 是另一种 Web 存储机制,与 localStorage 类似,但有一些重要的区别。

特点

  • 会话级别的存储:sessionStorage 的数据仅在页面会话期间有效,关闭浏览器或标签页后数据会被清除。
  • 大小限制:每个域名下的存储量通常为 5MB。
  • 只能存储字符串:同样,存储的数据必须是字符串。
  • 同源策略:遵循同源策略,数据只能在同一源下访问。

示例

当用户在一个表单中输入信息时,可以使用 sessionStorage 暂时保存这些信息,以防止在页面刷新时丢失:

// 存储表单输入
sessionStorage.setItem('formData', JSON.stringify({ name: 'Alice', email: 'alice@example.com' }));

// 获取表单输入
const formData = JSON.parse(sessionStorage.getItem('formData'));
console.log(formData); // 输出 { name: 'Alice', email: 'alice@example.com' }

5. IndexedDB

IndexedDB 是一种低级别的 API,用于在客户端存储大量结构化数据。

特点

  • 异步 API:IndexedDB 的操作是异步的,不会阻塞主线程。
  • 大小限制:理论上没有严格限制,但浏览器会根据设备和存储空间施加限制。
  • 可以存储二进制数据:可以存储复杂的数据类型,包括二进制数据(如图像文件)。
  • 同源策略:遵循同源策略,数据只能在同一源下访问。

示例

IndexedDB 特别适合存储大量数据,比如用户的离线应用数据:

const request = indexedDB.open('myDatabase', 1);

request.onupgradeneeded = function(event) {
    const db = event.target.result;
    const objectStore = db.createObjectStore('users', { keyPath: 'id' });
};

request.onsuccess = function(event) {
    const db = event.target.result;
    const transaction = db.transaction('users', 'readwrite');
    const objectStore = transaction.objectStore('users');

    // 添加用户数据
    objectStore.add({ id: 1, name: 'Alice', email: 'alice@example.com' });
};

总结

在Web开发中,选择合适的存储机制是至关重要的。不同的存储方式各有优缺点,适用于不同的场景:

  • Session:适合存储用户的会话状态,数据存储在服务器端。
  • Cookie:适合存储小型数据,支持过期时间和主机限制。
  • localStorage:适合存储持久的用户偏好设置,数据不会过期。
  • sessionStorage:适合存储会话级别的数据,关闭浏览器后数据会丢失。
  • IndexedDB:适合存储大量结构化数据和二进制数据,支持异步操作。
存储方式存储位置数据大小限制过期时间存储类型同源策略使用场景
Session服务器端取决于服务器配置有过期时间可以存储复杂数据存储用户会话状态,如登录状态、购物车信息
Cookie客户端4KB可设置字符串存储小型数据,如用户登录状态、跟踪信息
localStorage客户端5MB无过期时间字符串存储持久的用户偏好设置,如主题颜色
sessionStorage客户端5MB会话结束时清除字符串存储会话级别数据,如表单输入信息
IndexedDB客户端理论上无限制无过期时间结构化数据、二进制数据存储大量结构化数据,如离线应用数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2250255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

net9 abp vnext 多语言通过数据库动态管理

通过数据库加载实现动态管理,用户可以自己修改界面显示的文本,满足国际化需求 如图所示,前端使用tdesign vnext 新建表TSYS_Localization与TSYS_LocalizationDetail 国旗图标下载网址flag-icons: Free Country Flags in SVG 在Shared下创建下图3个文件 …

Vue:使用 KeepAlive 缓存切换掉的 component

一、内置特殊元素 不是组件 <component>、<slot> 和 <template> 具有类似组件的特性&#xff0c;也是模板语法的一部分。但它们并非真正的组件&#xff0c;同时在模板编译期间会被编译掉。因此&#xff0c;它们通常在模板中用小写字母书写。 1.1 <compone…

Spring中每次访问数据库都要创建SqlSession吗?

一、SqlSession是什么二、源码分析1&#xff09;mybatis获取Mapper流程2&#xff09;Spring创建Mapper接口的代理对象流程3&#xff09;MapperFactoryBean#getObject调用时机4&#xff09;SqlSessionTemplate创建流程5&#xff09;SqlSessionInterceptor拦截逻辑6&#xff09;开…

【数据结构】填空集

基本术语 顺序队列在实现的时候&#xff0c;通常将数组看成是一个首尾相连的循环队列&#xff0c;这样做的目的是为避免产生&#xff08;溢出&#xff09;现象 数组q[M]&#xff08;M等于6&#xff09;存储一个循环队&#xff0c;first和last分别指向首尾指针。已知first2,la…

【趣味升级版】斗破苍穹修炼文字游戏HTML,CSS,JS

目录 图片展示 开始游戏 手动升级&#xff08;满100%即可升级&#xff09; 升级完成&#xff0c;即可解锁打怪模式 新增功能说明&#xff1a; 如何操作&#xff1a; 完整代码 实现一个简单的斗破苍穹修炼文字游戏&#xff0c;你可以使用HTML、CSS和JavaScript结合来构建…

【在Linux世界中追寻伟大的One Piece】多线程(三)

目录 1 -> Linux线程同步 1.1 -> 条件变量 1.2 -> 同步概念与竞态条件 1.3 -> 条件变量函数 1.4 -> 为什么pthread_cond_wait需要互斥量 1.5 -> 条件变量使用规范 2 -> 生产者消费者模型 2.1 -> 为什么要使用生产者消费者模型 2.2 -> 生产…

AI数据分析工具(一)

Looker Studio&#xff08;谷歌&#xff09;-免费 优点 免费使用&#xff1a;对于中小型企业和个人用户来说&#xff0c;没有任何费用压力&#xff0c;可以免费享受到数据可视化和报表创建的功能。与Google服务集成&#xff1a;特别适合使用Google产品生态的企业&#xff0c;…

个人博客接入github issue风格的评论,utteranc,gitment

在做个人博客的时候&#xff0c;如果你需要评论功能&#xff0c;但是又不想构建用户体系和评论模块&#xff0c;那么可以直接使用github的issue提供的接口&#xff0c;对应的开源项目有utteranc和gitment&#xff0c;尤其是前者。 它们的原理是一样的&#xff1a;在博客文章下…

springboot 配置跨域访问

什么是 CORS&#xff1f; CORS&#xff0c;全称是“跨源资源共享”&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff0c;是一种Web应用程序的安全机制&#xff0c;用于控制不同源的资源之间的交互。 在Web应用程序中&#xff0c;CORS定义了一种机制&#xff0…

探索Python WebSocket新境界:picows库揭秘

文章目录 探索Python WebSocket新境界&#xff1a;picows库揭秘第一部分&#xff1a;背景介绍第二部分&#xff1a;picows库概述第三部分&#xff1a;安装picows库第四部分&#xff1a;简单库函数使用方法第五部分&#xff1a;场景应用第六部分&#xff1a;常见Bug及解决方案第…

【Linux】-学习笔记06

第二章、时间同步服务器 2.1时间同步服务器的使用 2.1.1系统时区时间的管理 timedatectl set-time "2024-02-13 10:41:55" ##设定系统时间 timedatectl list-timezones ##显示系统的所有时区 timedatectl set-timezone "Asia/Shangh…

Mac使用charles抓包

一、官网下载安装 二、配置Help--->SSL Proxying 有证书选择全部信任即可 三、设置系统代理&#xff0c;mac每次重启都需要选择&#xff0c;否则会没有数据 四、设置端口&#xff08;如果无法获取https&#xff09; 五、手机链接&#xff0c;从网页下载证书保存到手机&…

3d扫描建模产品开发-三维扫描检测蓝光检测

现当下&#xff0c;汽车制造、航空航天&#xff0c;还是消费电子、医疗器械&#xff0c;三维扫描检测与蓝光技术正以前所未有的精度和效率&#xff0c;推动着产品从概念到实物的快速转化。 三维扫描技术&#xff0c;简而言之&#xff0c;就是通过激光、结构光&#xff08;如蓝…

Hive中的基本数据类型和表的类型

Hive支持关系数据库中大多数据基本数据类型&#xff0c;同时还支持三种复杂类型。 示例&#xff1a; Hive表 创建表 – 直接建表法 create table t_page_view ( page_id bigint comment ‘页面ID’, page_name string comment ‘页面名称’, page_url string comment ‘页面…

Python PDF转JPG图片小工具

Python PDF转JPG图片小工具 1.简介 将单个pdf装换成jpg格式图片 Tip: 1、软件窗口默认最前端&#xff0c;不支持调整窗口大小&#xff1b; 2、可通过按钮选择PDF文件&#xff0c;也可以直接拖拽文件到窗口&#xff1b; 3、转换质量有5个档位&#xff0c;&#xff08;0.25&a…

剖析 SpringBoot 于夕阳红公寓管理系统架构搭建的核心作用

3 系统分析 本文作者在确定了研究的课题之后&#xff0c;从各大数字图书馆下载文献来阅读&#xff0c;并了解同类型的网站具备的大致功能&#xff0c;然后与本系统用户的实际需求结合进行分析&#xff0c;得出本系统要研究的具体功能与性能。虽然分析系统这一阶段性工作主要是确…

springboot336社区物资交易互助平台pf(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 社区物资交易互助平台设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff…

嵌入式linux系统中网络编程的具体实现

1.网络编程简介 要编写通过计算机网络通信的程序,首先要确定这些程序同通信的协议(protocol),在设计一个协议的细节之前,首先要分清程序是由哪个程序发起以及响应何时产生。 举例来说,一般认为WEB服务器程序是一个长时间运行的程序(守护进程deamon),它只在响应来自网…

vue3.0 根据富文本html页面生成压缩包(含视频在线地址、图片在线地址、前端截图、前端文档)

vue3.0生成压缩包&#xff08;含在线地址、前端截图、前端文档&#xff09; 需求描述效果开始下载插件包基本代码构造 点击下载按钮1.截图content元素&#xff0c;并转化为pdfcanvas putImageData、getImageDatagetImageData 获取指定矩形区域的像素信息putImageData 将这些数据…

由于导包而引发的错误

今天在调试时发现删除功能无论如何都无法实现&#xff0c;于是调试找到了mapper层的错误但不知道为什么报错。以下是报错信息。 Caused by: org.apache.ibatis.binding.BindingException: Parameter userIds not found. Available parameters are [arg0, collection, list]at o…