详解 Cookies 和 WebStorage

news2025/1/11 0:51:21

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)下的数据。下边我们对这三种数据存储方式进行介绍,并比较分析他们的共性与区别。

image-20240526134716059

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”; // 创建 Cookies

document.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,从而实现对网页本地存储的数据进行操作。

  1. setItem(‘key’,‘value’); 给 LocalStorage 或 SessionStorage 中添加一个键值对数据

    localStorage.setItem('name', 'John Doe');
    sessionStorage.setItem('color', 'red');
    
  2. getItem(‘key’); 根据 key 查找 LocalStorage 或 SessionStorage 中存储的对应的 value;不存在对应数据则返回 null

    localStorage.getItem('name'); // output: John Due 
    sessionStorage.getItem('color'); // output: red
    sessionStorage.getItem('age'); // output: null
    
  3. removeItem(‘key’); 根据 key 删除 LocalStorage 或 SessionStorage 中存储的对应的键值对

    localStorage.removeItem('name'); 
    localStorage.getItem('name'); // output:null
    
    sessionStorage.removeItem('color');
    sessionStorage.getItem('color'); // output: null
    
  4. key(index); 根据索引 index,返回 LocalStorage 或 SessionStorage 中存储的对应的 key

    localStorage.key(0); // output: "name"
    sessionStorage.key(0); // output: "color"
    
  5. clear(); 删除 LocalStorage 或 SessionStorage 中存储的所有数据

    localStorage.clear();
    sessionStorage.clear();
    

三种数据存储方式的对比分析

共性

Cookies、LocalStorage、SessionStorage 三者都

  • 将数据存储于客户端(client side),客户端可以对这些数据进行读取和修改。
  • 都是键值对(key-value)形式的数据。
  • value 必须是字符串。可以使用 JSON.stringify() 将对象序列化为一个字符串后再存储。

差异

准则CookiesLocalStorageSessionStorage
存储容量4kb5-10 MB5-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

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

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

相关文章

某钢铁企业数字化转型规划案例(114页PPT)

案例介绍: 该钢铁企业的数字化转型案例表明,数字化转型是钢铁企业应对市场竞争、提高生产效率、降低成本、优化资源配置和降低能耗排放的重要手段。通过引入先进的技术和管理理念,加强员工培训和人才引进,企业可以成功实现数字化…

【Java】欸...?我学集合框架?真的假的?

【Java】欸…?我学集合框架?真的假的? Java集合框架 概述 Java集合框架主要由以下几个部分组成: 接口(Interfaces):定义了集合的基本操作,如添加、删除、遍历等。实现&#xff0…

【wiki知识库】01.wiki知识库前后端项目搭建(SpringBoot+Vue3)

📝个人主页:哈__ 期待您的关注 🌼环境准备 想要搭建自己的wiki知识库,要提前搭建好自己的开发环境,后端我使用的是SpringBoot,前端使用的是Vue3,采用前后端分离的技术实现。同时使用了Mysql数…

2 使用香橙派AIpro报错 No module named ‘acllite utils‘

当使用jupyter运行香橙派的notebooks下面的案例的时候启动使用jupyter lab 然后自动跳转到jupyter页面。如下图: 这是自动跳转过来的。然后运行下面的包的导入后报错: 报错为No module named ‘acllite utils’,那么我们打开notebooks文件夹下面的start_notebooks.sh文件:…

【全开源】多功能投票小程序(ThinkPHP+FastAdmin+Uniapp)

打造高效、便捷的投票体验 一、引言 在数字化快速发展的今天,投票作为一种常见的决策方式,其便捷性和效率性显得尤为重要。为了满足不同场景下的投票需求,我们推出了这款多功能投票小程序系统源码。该系统源码设计灵活、功能丰富&#xff0…

分享:怎么才能保证大数据查询的准确性?

随着大数据应用到金融风控领域,大数据越来越重要了,很多朋友在查大数据的时候都会遇到一个问题,那就是自己查询的大数据什么信息都没有,要么就是很少,这是什么原因呢?要怎么才能保证大数据查询的准确性呢?下面小编就…

有什么免费视频翻译软件?安利5款视频翻译软件给你

随着“跨文化交流”话题的热度不断攀升,越来越多的视频内容跨越国界,触及全球观众。 在这一趋势下,视频翻译行业迎来了巨大的发展机遇。然而,面对众多的视频翻译工具,如何挑选出最合心意的那款呢? 现在&a…

RPA+AI 应用案例集合:自动推流直播

使用场景: 自动定时推流直播 使用技术: python playwright 每个解决一个小问题 During handling of the above exception, another exception occurred:Traceback (most recent call last): File "D:\pythonTryEverything\putdonwphone\not_watch_…

Vue.Draggable:强大的Vue拖放组件技术探索

一、引言 随着前端技术的不断发展,拖放(Drag-and-Drop)功能已经成为许多Web应用不可或缺的一部分。Vue.js作为现代前端框架的佼佼者,为开发者提供了丰富的生态系统和强大的工具链。Vue.Draggable作为基于Sortable.js的Vue拖放组件…

代码随想录算法训练营第三十五天 | 122.买卖股票的最佳时机 II、55.跳跃游戏、45.跳跃游戏 II

目录 122.买卖股票的最佳时机 思路 代码 55.跳跃游戏 思路 代码 45.跳跃问题 II 思路 代码 122.买卖股票的最佳时机 本题解法很巧妙,大家可以看题思考一下,在看题解。 代码随想录 思路 贪心这种东西,毫无章法可言, 完全…

c++引用和内联函数

一、引用 1.引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。(引用类型必须和引用实体是同种类型的),如&#x…

漫谈企业信息化安全-综述

一、前言 一直以来想写一些文章,谈一谈企业信息化过程中的安全问题及对策。 随着信息技术的不断发展和普及,特别是今年来移动办公、云服务等等新的工作模式和新的信息技术的应用,企业信息化已经成为提升竞争力、促进创新和发展的重要途径。…

QT小项目:实现远程登录数据库功能(下一章实现主界面菜单设计)

一、环境 1、下载 vs_redist.x64和mysql-connector-c8.0.27-winx64.msi(这个依赖于前者)。 mysql-connector-c8.0.27-winx64.msi vs_redist.x64 二、将程序的数据库登录部分修改 1、这里新增一个控件方便客户端输入ip地址 2、打包项目,步骤参考 QT 项目打包 3、将…

揭秘 淘宝死店采集私信筛选,号称日赚500+

淘宝死店采集工具为电子商务创业者揭示了一个领域的新机遇,通过提供一系列深入分析和资源挖掘的功能,展现了从失败中寻找成功之道的独特方法论。以下是如何通过这种工具寻找电商平台中的隐含机会的几个关键方面: 分析失败的深层原因&#x…

AbMole - 肿瘤发展与免疫器官的“舞蹈”:一场细胞层面的时间赛跑

在生物医学领域,肿瘤与免疫系统之间的相互作用一直是研究的热点话题。肿瘤细胞不是孤立存在的,它们与宿主的免疫系统进行着一场复杂的“舞蹈”。 最近,一项发表在《Molecular & Cellular Proteomics》杂志上的研究,为我们揭开…

kube-apiserver内存占用过多 go tool pprof 入门

目录 环境问题排查1、kube-apiserver %CPU 146 正常,%MEM 高达70,,load average 400,出现kswapd0进程。2、k describe node 看到 SystemOOM3、是否大量连接导致?4、通过prom查看指标5、访问K8s API6、pprof 火焰图 解决…

某方protobuf闲谈

问题 当我们去看某方的时候,搜索了关键词svm,然后通过抓包查看,请求的Request Payload是一串看不懂的乱码,并且返回的数据也大部分是乱码 观察请求的Content-Type是application/grpc-web+proto,没错数据的传输是protobuf的形式了 protobuf的相关概念和原理,网上有很多教…

火山引擎“奇袭”阿里云

图片|电影《美国队长3》剧照 ©自象限原创 作者丨程心 编辑丨罗辑 大模型价格战,已经不是什么新闻。 从OpenAI发布GPT-4o,将API价格下调50%,并宣布面向普通用户免费开始,就标志着大模型的竞争从性能进入到了成本…

CSS单位px、rem、em、vw、vh的区别

目录 前言 零.视口介绍 一.px 二.em 三.rem【重要】 3.1rem介绍 3.2rem与em的区别 四.vw、vh、vmax、vmin 五.注意问题 5.1如何使1rem 10px? 5.2如果父元素没有指定高度,那么子元素的百分比高度是多少? 5.3更多问题 前言 这几…

【MySQL】——并发控制

💻博主现有专栏: C51单片机(STC89C516),c语言,c,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux&#xf…