详解 Cookies 和 WebStorage
Cookies 和 WebStorage
- Cookies 和 WebStorage
- Cookies
- 简要介绍
- 操作 Cookies(document.cookie)
- 不足之处
- WebStorage
- 简要介绍
- LocalStorage Vs. SessionStorage
- 操作 WebStorage
- 三种数据存储方式的对比分析
- 共性
- 差异
- REFERENCES
Cookies 和 WebStorage
Cookies 和 WebStorage(包括 LocalStorage、SessionStorage)是三种常见的将数据存储在客户端的方式。在任意一个网页中打开开发者工具(F12),我们可以在 Application 选项卡的中看到 LocalStorage、SessionStorage、Cookies ——这些存储于当前域名(Current Domain)下的数据。下边我们对这三种数据存储方式进行介绍,并比较分析他们的共性与区别。
Cookies
简要介绍
Cookies 有一系列别名,如 HTTP Cookies、Internet Cookies、Browser Cookies、Web Cookies,这些名词指向的都是同一个含义。
Cookies 是服务器发送给浏览器的少量数据。同时,服务器端存储着该数据以及对应的用户 ID。通过 Cookie 请求头,每次浏览器发送 HTTP 请求时, Cookies 都会被自动发送给服务端。
Cookies 是以键值对(key-value)形式存储的数据。我们也可以设置 Cookies 的过期时间(expiry date)和对应路径。
操作 Cookies(document.cookie)
我们可以在 JavaScript 中使用document.cookie 创建、读取、删除 Cookies,同时也可以设置 Cookies 的过期时间和对应路径。使用示例如下,
document.cookie = “username=John Doe”; // 创建 Cookiesdocument.cookie = “username=John Doe; expires=Thu, 14 Dec 2034 12:00:00 UTC”; // 创建 Cookies 并设置 Cookies 的过期时间。时间到了 Cookies 就会被自动删除。
/* 注意:如果没有指定过期时间(expiration date),Cookies 会在浏览器关闭时自动删除 */document.cookie = "username=John Doe; expires=Thu, 14 Dec 2034 12:00:00 UTC; path=/"; // 创建 Cookie 并设置 Cookies 的过期时间和对应路径。设置对应路径为 /,表示该 Cookie 对应当前域名(current domain)下的根路径(root path)。
/* 强调:我们知道 Cookies 是对应域名存储的,但是 Cookies 也可以对应域名下的路径存储。例如,如果我们创建 Cookies 并设置 path=/admin:当 URL 类型为 /admin 或 /admin/... (.../admin 不行!!!) 时,我们就可以访问到对应 /admin 路径存储的 Cookies;反之,当 URL 类型为 /cart/... 时,我们就无法访问到对应 /admin 路径存储的 Cookies 数据 */
/* 注意:当我们没有设置 Cookies 的对应路径时,Cookies 所属的对应路径为当前页面(即当前 URL 路径) */
关于 Cookies 可访问性的进一步说明
- 设置了
path
- 如果将 Cookie 的路径设置为
path=/admin,
- 那么该 Cookie 将会在以下路径下可用:
/admin、/admin/...(例如,/admin/dashboard,/admin/settings)- 然而,它不会在以下路径下可用:
/somethingelse/admin、/cart/admin- 没有设置
path
- 如果在
/example/page路径上设置了一个没有路径参数的 Cookie,那么这个 Cookie 将会在/example/page以及其任何子路径(如/example/page/subpage)上可用。- 但是这个 Cookie 不会在
/example/anotherpage或者/different/path路径上可用。创建 Cookies 时指定的 path 对应的是网页 URL 的请求路径
![]()
不足之处
-
浏览器每次发送 HTTP 请求都会携带 Cookies 数据到服务器,影响网站整体性能
每次请求携带 Cookie 增加了请求的体积,会导致网络传输变慢、服务器处理请求时间变长等问题
-
存储上限为 4KB
-
安全问题
跨站点脚本攻击(XSS)、跨站点请求伪造(SCRF)、Cookie 劫持、Cookie 欺骗
WebStorage
简要介绍
HTML5 提供了两个新的对象(LocalStorage、SessionStorage)用于网页数据的本地存储,统称为 WebStorage。
WebStorage 也以键值对(key-value)形式存储数据。
WebStorage 相比于 Cookies 有以下特点及优势
- 存储的数据不会随着 HTTP 请求而重新加载或发送给服务器
- 存储的数据大小高达 5MB (与浏览器有关),同时不会影响网页的整体性能
- 存储的数据只能被客户端(client side)访问,因此数据更加安全
LocalStorage Vs. SessionStorage
当我们关闭浏览器后,LocalStorage 中的数据不会消失,但是 SessionStorage 中数据被自动删除。
操作 WebStorage
下述五个基本方法既适用于 LocalStorage,也适用于 SessionStorage,从而实现对网页本地存储的数据进行操作。
-
setItem(‘key’,‘value’); 给 LocalStorage 或 SessionStorage 中添加一个键值对数据
localStorage.setItem('name', 'John Doe'); sessionStorage.setItem('color', 'red'); -
getItem(‘key’); 根据 key 查找 LocalStorage 或 SessionStorage 中存储的对应的 value;不存在对应数据则返回 null
localStorage.getItem('name'); // output: John Due sessionStorage.getItem('color'); // output: red sessionStorage.getItem('age'); // output: null -
removeItem(‘key’); 根据 key 删除 LocalStorage 或 SessionStorage 中存储的对应的键值对
localStorage.removeItem('name'); localStorage.getItem('name'); // output:nullsessionStorage.removeItem('color'); sessionStorage.getItem('color'); // output: null -
key(index); 根据索引 index,返回 LocalStorage 或 SessionStorage 中存储的对应的 key
localStorage.key(0); // output: "name" sessionStorage.key(0); // output: "color" -
clear(); 删除 LocalStorage 或 SessionStorage 中存储的所有数据
localStorage.clear(); sessionStorage.clear();
三种数据存储方式的对比分析
共性
Cookies、LocalStorage、SessionStorage 三者都
- 将数据存储于客户端(client side),客户端可以对这些数据进行读取和修改。
- 都是键值对(key-value)形式的数据。
- value 必须是字符串。可以使用
JSON.stringify()将对象序列化为一个字符串后再存储。
差异
| 准则 | Cookies | LocalStorage | SessionStorage |
|---|---|---|---|
| 存储容量 | 4kb | 5-10 MB | 5-10 MB |
| 是否会过期 | √ | × | √ |
| 服务端是否可访问 | √ | × | × |
| 数据是否随 HTTP 请求发送 | √ | × | × |
| 数据丢失时机 | 过期时 | 定期删除 | 浏览器页签(tab)关闭 |
| 数据存储位置 | 客户端 & 服务端 | 客户端 | 客户端 |
REFERENCES
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage、
https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
https://medium.com/segmentify-tech/cookie-vs-local-storage-session-storage-ee4c0a07b74e
https://medium.com/@dimplekumari0228/describe-the-difference-between-a-cookie-sessionstorage-and-localstorage-e731a627acb1
相关文章:
详解 Cookies 和 WebStorage
Cookies 和 WebStorage Cookies 和 WebStorageCookies简要介绍操作 Cookies(document.cookie)不足之处 WebStorage简要介绍LocalStorage Vs. SessionStorage操作 WebStorage 三种数据存储方式的对比分析共性差异 REFERENCES Cookies 和 WebStorage Cook…...
BeanFactory、FactroyBean、ApplicationContext
BeanFactory Ioc容器、定义接口规范来管理spring bean的生命周期、依赖、注入,spring中有各种Ioc容器 FactroyBean 定制的工厂Bean,可以通过抽象工厂方式创建的bean,不纳入spring的生命周期、依赖、注入特性,相当于spring给第三…...
【计算机网络】HTTPS 协议原理
加密 1. 加密概念 加密就是把明文 (要传输的信息)进行一系列变换,生成密文。 解密就是把密文再进行一系列变换,还原成明文。 在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进行这个过程,这样的数…...
springboot + Vue前后端项目(第十二记)
项目实战第十二记 1.写在前面2. 整合Echarts2.1 vue安装Echarts2.2 使用Echarts2.3 EchartsController编写2.4 Home.vue编写 总结写在最后 1.写在前面 本篇主要讲解系统整合Echarts 2. 整合Echarts 2.1 vue安装Echarts npm i echarts -S2.2 使用Echarts vue中使用echarts的…...
linux 常用命令:find grep ps netstat sudo df du rm
rm 命令 删除 -r 是递归参数(recursive),用于删除目录及其内容。如果不加这个参数,rm 命令无法删除非空目录。-f 是强制参数(force),用于强制删除文件或目录,不会进行任何确认提示…...
SQLiteOpenHelper数据库帮助器
SQLiteOpenHelper数据库帮助器是Android提供的数据库辅助工具。 1、继承SQLiteOpenHelper类,需要重写onCreate和onUpgrade两个方法 案例:实现增删改查 package com.example.databases_text;import android.app.PictureInPictureParams; import androi…...
2024年5月26日 (周日) 叶子游戏新闻
资深开发者:3A游戏当前处于一种尴尬的中间地带游戏行业整体,尤其是3A游戏正处于艰难时期。尽管2023年3A游戏佳作频出,广受好评,但居高不下的游戏开发成本(传闻《漫威蜘蛛侠2》的制作成本高达3亿美元)正严重…...
STM32-10-定时器
STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG 文章目录 一、STM32 基础定时器1. 基本定时器简介2. 基本定时器框图3. 基本定时器相关寄存器4. 定时器溢出…...
今天说的什么好呢
先这样吧...
计算机网络-Traffic-Filter流量过滤策略
一、概述 为提高网络安全性,管理人员需要控制进入网络的流量,将不信任的报文丢弃在网络边界。所谓的不信任报文是指对用户来说存在安全隐患或者不愿意接收的报文。同时保证数据访问安全性,企业网络中经常会要求一些部门之间不能相互访问。 背…...
小白入职 必要熟悉 Git / tortoiseGit 工具
1.安装Git 1.1 了解Git Git是分布式版本控制系统,没有中央服务器的每个人的电脑就是一个完整的版本库,工作时无需联网可多人协作,只需把各自的修改推送给对方,就可以互相看到对方的修改了 分布式版本控制工具管理方式ÿ…...
春秋CVE-2022-23906
简介 CMS Made Simple v2.2.15 被发现包含通过上传图片功能的远程命令执行 (RCE) 漏洞。此漏洞通过精心制作的图像文件被利用。 正文 1.进入靶场2.进入登录界面,弱口令admin/123456 3.进入后台,文件上传点 4.上传一句话木马图片 5.复制图片…...
JavaFX安装与使用
前言 最近学习了javafx,开始时在配置环境和导包时遇到了一些麻烦,关于网上很多方法都尝试过了,现在问题都解决了,和大家分享一下我是怎么实现javafx的配置,希望大家可以通过这个方法实现自己的环境配置! 🙈个人主页: 心.c 🔥文章专题:javafx Ὁ…...
漫画|基于SprinBoot+vue的漫画网站(源码+数据库+文档)
漫画网站 目录 基于SprinBootvue的漫画网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大…...
python-项目实战
项目实战 1.外星人入侵小游戏 2.数据可视化 3.web应用开发 一、外星人入侵小游戏 需求: 开发大型项目时,做好规划后再动手编写项目很重要。规划可确保你不偏离轨道,从而提高项目成功的可能性。 在游戏《外星人入侵》中,玩家控制着一艘最…...
单片机原理及技术(一)—— 认识单片机(C51编程)
目录 一、单片机概述 1.1 什么是单片机 1.2 单片机的发展历史 1.3 单片机的特点 1.4 MCS-51 系列与 AT89S5x 系列单片机 1.4.1 MCS-51 系列单片机 1.4.2 AT89S5x 系列单片机 1.5 各种衍生品种的8051单片机 1.5.1 STC 系列单片机 1.5.2 C8051Fxxx 系列单片机 一、单片…...
白嫖的在线工具类宝藏网站清单,快点击进来收藏一波
简单整理了一下自己日常经常使用的10个免费工具网站,建议点赞关注收藏,快点分享给小伙伴们! 1.奶牛快传:用户体验更好的网盘工具。 https://cowtransfer.com/ 今年开始使用的一款网盘工具,和百度网盘类似,叫奶牛快传,如…...
【机器学习300问】97、机器学习中哪些是凸优化问题,哪些是非凸优化问题?
在机器学习的领域中,多数模型的参数估计问题实质上可以转化为优化问题。鉴于机器学习模型的多样性,不同的模型会对应着不同的损失函数,进而形成各具特色的优化问题。了解优化问题的形式和特点,对于提升我们求解模型参数的效率和准…...
两种盒模型
在CSS中,有两种主要的盒模型(Box Model),它们决定了元素的尺寸计算方式: 标准盒模型(W3C Box Model) 在标准盒模型中,元素的总宽度和总高度分别由以下几个部分组成: Cont…...
【C++】类型转换
目录 前言一、C语言中的类型转换二、为什么C需要四种类型转换三、C强制类型转换3.1 static_cast3.2 reinterpret_cast3.3 const_cast3.4 dynamic_cast3.5 RTTI 前言 本篇文章讲解的是C中对于C语言类型转换做出的一些更好的规范问题,同时也保证了在一些特殊场景下进…...
FastAPI单元测试实战:别等上线被喷才后悔,TestClient用对了真香!芯
正文 异步/等待解决了什么问题? 在传统同步I/O操作中(如文件读取或Web API调用),调用线程会被阻塞直到操作完成。这在UI应用中会导致界面冻结,在服务器应用中则造成线程资源的浪费。async/await通过非阻塞的异步操作解…...
HJ170 01序列
题目题解(36)讨论(31)排行 简单 通过率:39.25% 时间限制:1秒 空间限制:256M 知识点模拟 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 给定一个数组…...
Linux I/O 演进史:从管道到零拷贝,一篇串起个服务端核心原语孛
前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时,输出结果中包含大量由集群自动生成的元数据(如 managedFields、resourceVersion、uid 等)。这些信息在实际复用 yaml 清单时需要手动清理,增加了额外的工作量。 使用 kube…...
绩效考核软件避坑实录:为什么你觉得绩效考核软件”不好用”
好用的绩效考核软件应该具备灵活的考核模板配置、自动化流程推进、多维度数据分析三大核心能力。 2026年主流绩效考核软件已普遍集成AI能力,可将绩效评估周期从平均2周压缩到3天,同时减少70%以上的人为评分偏差。选择时重点关注系统的配置灵活度、与现有…...
一款基于.NET开源的B站视频下载工具,简单高效,开箱即用
🌈前言作为程序员,相信大家都经常在B站刷学习视频、技术教程,有时候遇到优质内容,想下载下来离线观看、反复琢磨,却找不到好用的工具——要么广告多,要么功能不全,要么操作复杂🔖介绍…...
把 Flask 搬进 ESP,高中生自研嵌入式 Web 框架 MicroFlask !唤
如果有多个供应商,你也可以使用 [[CC-Switch]] 来可视化管理这些API key,以及claude code 的skills。 # 多平台安装指令 curl -fsSL https://claude.ai/install.sh | bash ## Claude Code 配置 GLM Coding Plan curl -O "https://cdn.bigmodel.cn/i…...
周鸿祎西安交大演讲:AI时代青年的机遇与挑战
【赓续“西迁精神”,驾驭AI重塑竞争力】近日,西安交通大学迎来建校130周年暨西迁70周年纪念大会,360集团创始人、西安交大杰出校友周鸿祎重返母校发表主旨演讲。他勉励青年学子赓续“西迁精神”,坚守“解决真问题”的底色。在人工…...
量子机器学习:传统AI的颠覆者?
测试工程师的技术十字路口当量子计算以叠加态、纠缠态等特性突破经典计算边界时,其与人工智能融合催生的量子机器学习(QML) 正引发软件测试领域的范式变革。本文将从测试验证逻辑、工具链演进及质量保障体系三方面,剖析QML对传统A…...
YOLOv8 智能交通违章检测 - 疲劳/分心驾驶检测详解
YOLOv8 智能交通违章检测 - 疲劳/分心驾驶检测详解 疲劳驾驶和分心驾驶检测属于驾驶员状态监测(DMS, Driver Monitoring System)的核心功能。与外部交通违章不同,这需要摄像头安装在车内,对准驾驶员面部。 由于人脸关键点(眼睛、嘴巴)的微小变化对精度要求极高,单纯的…...
CustomTkinter终极指南:三步打造现代化Python桌面应用
CustomTkinter终极指南:三步打造现代化Python桌面应用 【免费下载链接】CustomTkinter A modern and customizable python UI-library based on Tkinter 项目地址: https://gitcode.com/gh_mirrors/cu/CustomTkinter 还在为Tkinter陈旧界面而烦恼吗ÿ…...
