5.浏览器存储

1.浏览器本地存储方式

(1)Cookie

  • 特性:

    • 名称创建后不可修改。
    • 遵循同源策略,不能跨域名共享。
    • 每个域名下Cookie数量和大小受限(约20个,每个4KB)。
    • 安全性问题:易被拦截,用于会话劫持。
    • 随每次HTTP请求自动发送至服务器。
  • 使用场景:

    • 会话管理:与服务器端的Session配合,存储Session ID,识别用户会话。
    • 用户偏好设置:保存用户的界面设置、语言偏好等不敏感信息。

(2) LocalStorage

  • 优点:

    • 较大的存储空间(通常5MB)。
    • 持久存储,不随浏览器关闭而消失。
    • 数据仅存储在客户端,减少网络流量。
  • 缺点:

    • 面临兼容性问题,如IE8及更低版本不支持。
    • 隐私模式下不可用。
    • 同源策略限制访问。
Javascript
// 数据保存到localStorage
localStorage.setItem('username', 'John Doe');
// 从 localStorage 获取数据
let username = localStorage.getItem('username');
// 从 localStorage 删除保存的数据
localStorage.removeItem('username');
// 清空所有localStorage 保存的数据
localStorage.clear();
// 获取键名key
let key = localStorage.key(index);
  • 使用场景:
    • 用户设置:存储用户选择的界面主题、字体大小等个性化设置。
    • 离线数据缓存:保存应用数据,以便在离线状态下使用。

(3) SessionStorage

  • 特点:

    • 类似LocalStorage,但数据仅在当前浏览器窗口或标签页有效。
    • 会话存储,关闭窗口或标签页后,数据会被清除。
    • 同源策略限制,且在同源下的不同窗口间不共享数据。
// 数据保存到sessionStorage
sessionStorage.setItem('username', 'John Doe');
// 从 sessionStorage获取数据
let username = sessionStorage.getItem('username');
// 从 sessionStorage删除保存的数据
sessionStorage.removeItem('username');
// 清空所有sessionStorage保存的数据
sessionStorage.clear();
// 获取键名key
let key = sessionStorage.key(index);
  • 使用场景:

    • 临时数据存储:保存表单填写过程中的草稿,防止意外刷新丢失数据。
    • 临时身份验证:存储临时的用户身份验证信息,如临时登录状态,直到关闭页面。

2.Cookie有哪些字段及对应的作用

  1. Name: 定义了Cookie的标识符,用于区分其他Cookie。
  2. Value: 存储Cookie的具体信息或数据,例如会话ID、用户偏好等。
  3. Size: 表明Cookie的大小,尽管这不是一个常见的直接操作字段,但了解它有助于避免超过浏览器对Cookie大小的限制。
  4. Path: 指定了哪些路径下的页面可以访问该Cookie。默认是当前页面的路径,可以根据需要设置为更宽泛或更具体的路径。
  5. Domain: 指定了哪些域名可以访问此Cookie。子域名通常也可以访问父域名设置的Cookie,有助于实现单点登录等功能。
  6. Secure: 当设为true时,指示浏览器仅在通过HTTPS连接时发送Cookie,增强了数据传输的安全性。
  7. HTTPOnly:设为true时,表示这个Cookie不能被客户端JavaScript访问,有助于防范跨站脚本(XSS)攻击,保护Cookie信息不被恶意脚本窃取。
  8. Expires/Max-Age: 指定Cookie的有效期。可以是一个具体日期时间(Expires),或者从创建时间开始的秒数(Max-Age)。如果未设置,则Cookie将在会话结束后(即浏览器关闭时)失效,称为会话Cookie。
属性名描述作用详解
NameCookie的标识符用于区分不同的Cookie,每个Cookie通过其Name唯一确定。
Value存储的具体信息或数据可包含会话ID、用户偏好设置、认证信息等,依据应用需求自定义内容。
SizeCookie的大小非直接操作字段,了解其大小有助于避免超出浏览器对Cookie大小的限制(通常约4KB)。
Path指定可访问该Cookie的页面路径默认为当前页面路径,可设置为更宽泛或更精确的路径以控制Cookie的可见性。
Domain指定哪些域名可以访问此Cookie支持子域名访问父域名Cookie,有利于实现单点登录等特性。
Secure是否仅在HTTPS连接时发送Cookie设为true增加安全性,确保敏感数据仅通过HTTPS安全连接传输。
HTTPOnly控制Cookie是否可被客户端JavaScript访问设为true可以防止XSS攻击,保护Cookie信息不被恶意脚本窃取。
Expires/Max-AgeCookie的有效期设定可设定具体过期日期(Expires)或生存时间(Max-Age,单位秒),未设定则为会话Cookie,随浏览器关闭失效。

这些属性共同控制着Cookie的存储、读取、有效期以及安全性,是Web应用中处理用户状态、认证和个性化设置的关键机制。

3.Cookie、LocalStorage和SessionStorage区别

Cookie

  • 用途:最初设计用于维护用户会话状态,如用户认证信息。服务器可以通过Set-Cookie头部在响应中设置Cookie,浏览器之后会自动在同源请求的HTTP头部中带上这些Cookie。
  • 存储量: 通常限制在4KB左右,对于现代Web应用来说,这在存储大量数据时显得捉襟见肘。
  • 生命周期: 可以设置为会话级别(浏览器关闭即失效)或指定一个过期时间。
  • 安全性: 易受到跨站脚本攻击(XSS)和中间人攻击,特别是当敏感数据如认证凭证未经加密存储时。
  • 跨域: 默认情况下,Cookie遵循同源策略,但可以通过设置domain属性来实现一定程度的跨域共享。

sessionStorage

  • 用途: 适用于存储会话级别的信息,如临时的表单数据。它在页面会话期间有效,即浏览器窗口或标签页关闭后数据就会被清除。
  • 存储量: 大多现代浏览器支持至少5MB的存储空间,远超Cookie。
  • 生命周期: 当浏览器窗口或标签页关闭时,数据自动删除。
  • 安全性:相比Cookie,不太容易受到XSS攻击,因为它不能通过JavaScript的document.cookie访问,但仍需注意在页面内防止数据泄露。
  • 跨域: 不支持跨域共享,严格遵循同源策略。

localStorage

  • 用途: 适合长期存储用户偏好设置、客户端数据缓存等不需要服务器交互的数据。
  • 存储量: 同sessionStorage,提供相对较大的存储空间。
  • 生命周期: 持久化存储,除非用户主动清除浏览器数据或通过JavaScript代码删除,否则数据一直存在。
  • 安全性: 同样面临XSS攻击的风险,但没有跨站请求伪造(CSRF)的风险,因为不随HTTP请求发送。
  • 跨域: 同sessionStorage,不支持跨域访问。
特性CookieLocalStorageSessionStorage
存储位置客户端和随HTTP请求发送客户端浏览器客户端浏览器
容量限制通常4KB左右一般为5MB或更大一般为5MB或更大
生命周期可设置,随会话或指定时间结束持久存储,除非主动删除会话结束时(浏览器关闭)
同源策略遵循遵循遵循
跨域共享有限支持(需服务器设置)不支持不支持
安全性问题易受XSS和中间人攻击易受XSS攻击,不随请求发送易受XSS攻击,不随请求发送
用途举例认证信息、偏好设置长期用户数据缓存、配置临时数据、表单输入暂存
APIdocument.cookiewindow.localStoragewindow.sessionStorage

当应对更大数据量的本地存储需求时,浏览器的IndexedDB成为优选方案。这是一种内置的非关系型数据库存储技术,专为客户端设计,能够高效存储和检索大量结构化数据。与Cookie、LocalStorage、SessionStorage相比,IndexedDB不仅存储容量更大,还支持创建索引、事务处理等高级功能,非常类似于NoSQL数据库,适用于构建需要处理大量数据的Web应用,如离线存储、用户生成内容的缓存等场景。通过使用IndexedDB,开发者可以克服传统本地存储在容量和性能上的局限,实现更复杂的数据管理逻辑。

IndexedDB

IndexedDB用于存储大量结构化或非结构化数据,提供了远超上述三种的存储能力,理论上受限于用户设备的可用空间。开发者依然需要注意防止XSS和CSRF攻击,但提供了更灵活的数据访问控制。

特点:
  1. 键值对存储与对象仓库:IndexedDB 通过对象仓库(Object Store)组织数据,每个对象仓库可以看作是一个表,其中的数据以键值对形式存在。键可以是简单的字符串或数字,也可以是复合键(KeyPath),确保数据的唯一性和高效查询。
  2. 异步API设计:所有的读写操作都是异步的,这意味着 IndexedDB操作不会阻塞用户界面线程,提高了应用的响应性和用户体验,特别适合处理大量数据时保持应用流畅。
  3. 事务处理:通过事务(Transactions)保证数据的一致性和完整性。事务可以包含多个操作,并且支持不同的隔离级别,如果事务中的任何操作失败,所有操作都会被回滚,确保数据状态不被破坏。
  4. 同源策略:遵循同源安全策略,确保数据只能被来自同一源的脚本访问,增强了安全性,防止数据泄露给恶意网站。
  5. 大容量存储:相比LocalStorage通常几MB的限制,IndexedDB提供了更大的存储空间,通常至少有250MB,某些现代浏览器更是提供了几乎不受限的存储空间,适合存储大量应用数据或离线缓存。
  6. 丰富的数据类型支持:除了基本的数据类型,IndexedDB还可以直接存储JavaScript对ArrayBuffer以及Blob对象,这对于存储图片、音频、视频等二进制大文件非常有用,使得Web应用能够实现更多样化的功能。
  7. 索引优化查询:允许在对象仓库上创建索引,通过索引可以快速查找和过滤数据,提高数据检索效率,特别是对于复杂的查询条件支持良好

4.前端储存的⽅式

  1. Cookies:主要用于在客户端存储小量数据,随每次HTTP请求发送至服务器,适用于存储认证信息、偏好设置等,但受限于大小和性能问题。
  2. LocalStorage: HTML5引入的存储API,提供持久化的本地存储,适合存储较大量的数据,如用户设置,且不随HTTP请求发送,减少了网络流量。
  3. SessionStorage: 同样是HTML5的一部分,用于存储会话级别的数据,当浏览器窗口关闭时数据会被清除,适合存储临时性的信息。
  4. IndexedDB: 一个强大的客户端存储数据库,特别适合处理大量结构化数据,支持事务处理、索引和查询,是NoSQL数据库,适用于复杂的客户端数据存储需求。
  5. Web SQL:虽已被W3C废弃,但在一些浏览器中仍有实现,它允许在客户端使用SQL查询语言操作数据库,但由于标准废弃,新项目不推荐使用。
  6. Cache API: 包括Service Worker Cache和Browser Cache,用于存储网络资源(如图片、脚本、样式表等),以加速页面加载和实现离线访问能力。
  7. File System API: 允许Web应用在用户授权的情况下读写用户计算机的文件系统,虽然不直接用于常规数据存储,但在某些场景下可以作为数据持久化的一种方式。
  8. URLSearchParams: 虽然严格来说不是存储技术,但可以通过URL的查询字符串传递和存储轻量级数据,特别是在页面间传递状态时。
  9. Service Workers: 结合Cache API,可以创建完全离线体验的应用,通过拦截网络请求并在本地存储中查找或回填数据。
  10. Application Cache (AppCache): 虽已被弃用,但曾是HTML5中用于实现离线存储应用资源的技术,现已被Service Workers和Cache API取代。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

策略模式 + 抽象工厂实现多方式登录验证

文章目录 1、需求背景2、常规想法3、工厂模式 配置文件解耦 策略模式4、具体实现5、其他场景6、一点思考 1、需求背景 以gitee为例,登录验证的方式有多种: 用户名密码登录短信验证码登录微信登录 先写一个登录接口,适配所有方式&#xff…

udp协议 服务器

1 TCP和UDP基本概念 TCP:(Transmission Control Protocol)是一种面向连接、可靠的基于字节流的传输层通信协议。并且提供了全双工通信,允许两个应用之间建立可靠的链接以进行数据交换 udp:(User Datagram Protocol):是一种无链接、不可靠、基于数据报文传输层协议&…

websocket服务执行playwright测试

上一篇博客从源码层面分析了playwright vscode插件实现原理,在上一篇博客中提到,backend服务是一个websocket服务。这遍博客将介绍如何封装一个websocket服务,通过发送消息来执行playwright测试。 初始化项目 第一步是初始化项目和安装必要的…

​【VMware】VMware Workstation的安装

目录 🌞1. VMware Workstation是什么 🌞2. VMware Workstation的安装详情 🌼2.1 VMware Workstation的安装 🌼2.2 VMware Workstation的无限使用 🌞1. VMware Workstation是什么 VMware Workstation是一款由VMwar…

【K8s】专题六:Kubernetes 资源限制及服务质量等级

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号! 目录 一、资源限制 1、基本介绍 2、工作原理 3、限制方法 二、服务质量等级 一、资源限制 1…

【软件测试入门】测试用例经典设计方法 — 因果图法

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、因果图设计测试用例的步骤 1、分析需求 阅读需求文档,如果User Case很复杂&am…

DIY灯光特效:霓虹灯动画制作教程

下面我们根据这张霓虹灯案例,教大家如何用智能动物霓虹灯闪烁的效果,大家可以根据思路,实现自己想要的动效效果,一起动手来做吧。 即时设计-可实时协作的专业 UI 设计工具 设置背景 新建画板尺寸为:800PX^600PX,设置背景色#120527。 绘制主题 输入自己喜欢文案,轮廓化,具体…

PHP-CGI的漏洞(CVE-2024-4577)

通过前两篇文章的铺垫,现在我们可以了解 CVE-2024-4577这个漏洞的原理 漏洞原理 CVE-2024-4577是CVE-2012-1823这个老漏洞的绕过,php cgi的老漏洞至今已经12年,具体可以参考我的另一个文档 简单来说,就是使用cgi模式运行的PHP&…

充电桩--充电桩智能化发展趋势

聚焦光伏产业、深耕储能市场、探究充电技术 小Q下午茶 相互交流学习储能和BMS相关内容 43篇原创内容 公众号 一、背景介绍 国家提出“新基建”以来,充电基础设施产业跃入人们的视线成为热门话题。充电基础设施作为充电网、车联网、能源网和物联网的连接器&…

JS对象、数组、字符串超详细方法

JavaScript 对象方法 对象创建的方式 对象字面量 var dog1 {name: "大黄",age: 2,speak: function () {console.log("汪汪");}, };使用Object构造函数 var dog2 new Object(); dog2.name "大黄"; dog2.age 2; dog2.speak function () …

卷积的通俗解释

以时间和空间两个维度分别理解卷积,先用文字来描述: 时间上,任何当前信号状态都是迄至当前所有信号状态的叠加;时间上,任何当前记忆状态都是迄至当前所有记忆状态的叠加;空间上,任何位置状态都…

初见:AntDB智能运维“三剑客“之ADC

引言 6月15日,PostgreSQL数据库技术峰会广州站圆满落幕。峰会上,亚信安慧数据库智能运维产品负责人李志龙介绍了AntDB的6大数据库引擎和3大工具产品能力。 这里的3大工具分别指: AntDB数据库迁移工具包 MTK 数据库智能运维平台 ACC AntDB数据…

SwiftUI 6.0(iOS 18/macOS 15)关于颜色 Color 的新玩法

概览 WWDC 2024 重装升级的 SwiftUI 6.0 让 Apple 不同平台(iOS 18/macOS 15)显得愈发的冰壶玉衡、美轮美奂。 之前梦寐以求的颜色混合功能在 WWDC 24 里终于美梦成真啦! 在本篇博文中,您将学到如下内容: 概览1. 梦想…

this.$prompt 提示框增加文本域并修改文本域高度

2024.06.24今天我学习了如何对提示框增加文本域的方法&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; <script>methods:{reject_event(){this.$prompt(驳回内容, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,inputType: textarea,inputPlaceholder…

精益思想在机器人开发中的应用体现

精益思想源于制造业&#xff0c;旨在通过消除浪费、优化流程、持续改进来提升企业竞争力。在机器人开发中&#xff0c;精益思想同样具有指导意义。它要求开发团队在需求分析、设计、制造、测试等各个环节中&#xff0c;不断追求精益求精&#xff0c;力求在降低成本的同时提升产…

同元软控智能电动汽车数字化解决方案亮相CICV 2024

2024年6月18日-20日&#xff0c;由中国汽车工程学会、国家智能网联汽车创新中心、清华大学车辆与运载学院、清华大学智能绿色车辆与交通全国重点实验室举办的第十一届国际智能网联汽车技术年会&#xff08;CICV 2024&#xff09;在北京召开。苏州同元软控信息技术有限公司&…

C++并发之协程实例(四)(通过迭代器访问生成器序列)

目录 1 协程2 实例3 运行 1 协程 协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的&#xff1a;它们通过返回到调用方来暂停执行&#xff0c;并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码&#xff08;例如&#xff0c;在没有显式回调…

【Linux】Centos升级到国产操作系统Openeuler

一、前言 迁移工具采用Openeuler官网提供的x2openEuler工具&#xff0c;是一款将源操作系统迁移到目标操作系统的迁移工具套件&#xff0c;具有批量化原地升级能力&#xff0c;当前支持将源 OS 升级至 openEuler 20.03。 官网链接&#xff1a;openEuler迁移专区 | 迁移专区首页…

8、MFC界面开发

界面开发 1、创建Ribbon样式的应用程序框架2、为Ribbon Bar添加控件2.1 下拉菜单2.2 添加消息处理函数 1、创建Ribbon样式的应用程序框架 创建MFC界面时选择样式为"Office"&#xff0c;然后再选择功能区。 2、为Ribbon Bar添加控件 Ribbon界面开发利用Ribbon Des…

lvs集群 Keepalived

Keepalived高可用集群 Keepalived概述 功能 LVS规则管理LVS集群真实服务器状态监测管理VIP Keepalived实现web高可用 安装keepalived软件 在webservers上配置 启动服务 webservers systemctl start keepalived.service ip a s | grep 192.168 #web1主机绑定vip 测试…