前端-Cookie篇

news2024/11/17 6:35:35

文章目录

  • 一、由来
    • 什么是Cookie?
    • 特点
    • Cookie的类型
  • 二、原理
  • 三、Cookie生成机制
    • 客户端设置案例
  • 四、属性
  • 五、缺陷
  • 最后分享一段自己工作中封装的一些关于cookie的公众方法
  • ✒️总结


前端Cookie是Web开发中非常重要的一部分,它是服务器发送到用户浏览器并保存在本地的一小块数据。以下是对前端Cookie的详细解析

一、由来

什么是Cookie?

  • Cookie(也称为HTTP Cookie、Web Cookie、浏览器Cookie等)是服务器发送到用户浏览器并保存在本地的一小块数据,该数据通常是用户账号相关的信息。
  • 假设一个系统有5个页面,然后每个页面都可以添加相关的商品,就有点像购物车,那一个用户在页面1加入了苹果,页面2加入了草莓,页面3加入了铅笔,页面4加入了电池,那在传统的HTTP上面的话,到底用什么类型的东西来存储这些数据呢,因为HTTP本身是一个无状态的请求,要记录这些数据统一发起一个购物车,生成一张订单是非常困难的,所以这个时候我们就需要有Cookie这个东西产生,所以Cookie最初的的原始目的,是为了维持状态而产生的,就像所有的苹果、草莓、铅笔、电池全部记录在Cookie中,然后Cookie附带着每个HTTP请求,这样服务器就可以知道用户一共选购了哪些内容,如下图所示
    在这里插入图片描述

特点

  • 存储位置:存储在用户浏览器中。
  • 数据内容:通常是用户相关的状态信息,如身份认证信息。
  • 大小限制:不同浏览器对Cookie的数量和大小限制不同,但一般来说,单域名下设置的Cookie不能超过30个,单条Cookie的大小不能超过4KB。
  • 过期时间:可以设置过期时间,到达过期时间后,浏览器会把Cookie清除掉。

Cookie的类型

  • 会话期Cookie:不设置具体失效时间,只会在当前会话结束之后被删除掉,存储在内存中。
  • 持久性Cookie:会设置好具体的有效期,被存储在磁盘中,浏览器关闭不会影响该Cookie,只有当有效期结束时,才会从磁盘中删除

二、原理

我们来聊聊Cookie的原理以及生成机制,其实非常简单,无非是三步,首先游览器会以一种无状态的方式去向服务器发起HTTP请求,服务器接收到请求之后,会在请求上的respond header上加上Cookie相关的信息然后染回给游览器,游览器后面再向服务器发送请求的时候,都会同步的带上Cookie,那这样Cookie就会附在每个HTTP请求上,服务器也可以根据这些信息来进行相关的逻辑判断
在这里插入图片描述

三、Cookie生成机制

关于Cookie生成机制有俩种方法,

  • 方法一:服务端生成,在Http Respond-Header 中 Set-Cookie
  • 方法二:客户端生成,通过document.cookie设置

客户端设置案例

document.cookie='name=chujian'

在这里插入图片描述

四、属性

我们来看下上面我们设置的一个cookie的属性值
在这里插入图片描述

  • Name:Cookie的名称,唯一标识该Cookie。
  • Value:与Name相对应的值,表示要存储的数据。
  • Domain:指定哪些域名及其子域名可以访问该Cookie。
  • Path:指定Cookie的作用路径,只有匹配该路径下的请求才会携带这个Cookie。
  • Expires/Max-Age: 它是一个cookie的过期时间,设置Cookie的过期时间或有效期。
  • HttpOnly:如果设置为true的时候就不能改变cookie的内容,设置后,Cookie将不能通过客户端脚本(如JavaScript)访问,有助于防止跨站脚本攻击(XSS)。
  • size是当前这个cookie的大小,这个size值指的是具体这个value的大小
  • Secure:这个也是安全性的标识,指定Cookie是否仅通过安全的HTTPS连接传输。

五、缺陷

聊一下cookie的一些缺陷以及对它的误用

  • cookie设计初衷用于维持HTTP状态,不用于存储数据
    1. 大小限制:每个cookie项只能存储4k数据
    2. 性能浪费:cookie附带在http请求上,数据量过大,会导致每个http请求就非常庞大

最后分享一段自己工作中封装的一些关于cookie的公众方法

// 设置cookie
export const setUserCookie = (name, value, expires) => {
  var date = new Date();
  date.setTime(date.getTime() + expires);
  console.log("时间", date.setTime(date.getTime() + expires));
  document.cookie =
    name + "=" + escape(value) + ";expires=" + date.toGMTString();
  // document.cookie = name + "=" + (value || "")  + expires + "; ";
};

// 过期时间秒设置cookie
export const setCookieWithSeconds = (name, value, seconds) => {
  var expires = "";
  if (seconds) {
    var date = new Date();
    date.setTime(date.getTime() + seconds * 1000);
    expires = "; expires=" + date.toUTCString();
  }
  document.cookie = name + "=" + (value || "") + expires + "; path=/";
};

// 获取Cookie值
export const getCookie = (name) => {
  var cookies = document.cookie.split("; ");
  for (var i = 0; i < cookies.length; i++) {
    var cookie = cookies[i].split("=");
    if (cookie[0] === name) {
      return cookie[1];
    }
  }
  return "";
};

// 清除所有cookie
export const clearAllCookies = () => {
  var cookies = document.cookie.split(";");
  for (var i = 0; i < cookies.length; i++) {
    var cookie = cookies[i];
    var eqPos = cookie.indexOf("=");
    var name = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim();
    document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
  }
};


✒️总结

如果这篇【文章】有帮助到你💖,希望可以给我点个赞👍,创作不易,如果有对前端端或者对python感兴趣的朋友,请多多关注💖💖💖,咱们一起探讨和努力!!!
👨‍🔧 个人主页 : 前端初见

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

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

相关文章

分享一款嵌入式开源LED指示灯控制代码框架cotLed

一、工程简介 cotLed是一款轻量级的LED控制软件框架&#xff0c;可以十分方便地控制及自定义LED的各种状态&#xff0c;移植方便&#xff0c;无需修改&#xff0c;只需要在初始化时实现单片机硬件GPIO初始化&#xff0c;同时为框架接口提供GPIO写函数即可。 框架代码工程地址&a…

C++:重定义

派生类和基类的同名成员问题 派生类中再实现一个基类中的方法会怎样 (1)代码实验&#xff1a;派生类和基类中各自实现一个内容不同但函数原型完全相同的方法&#xff0c;会怎么样 (2)结论&#xff1a;基类对象调用的是基类的方法&#xff0c;派生类对象调用执行的是派生类中重…

Vue3 + Echarts堆叠折线图的tooltip不显示问题

问题介绍 使用Echarts在Vue3Vite项目中绘制堆叠折线图的的时候&#xff0c;tooltip总是不显示&#xff0c;经过很长时间的排查和修改&#xff0c;最后发现是在使用上有错误导致的。 错误图片展示 问题原因 由于Vue3底层使用proxy代理创建示例&#xff0c;使用其创建出来的实…

甘蔗基因组--文献精读30

A chromosomal-scale genome assembly of modern cultivated hybrid sugarcane provides insights into origination and evolution 现代栽培杂交甘蔗的染色体级基因组组装提供了起源和进化的洞见&#xff0c;确实甘蔗好几个基因组了~ 摘要 甘蔗是一种具有重要经济和工业价值…

提升论文质量和说服力的高阶技巧:数据驱动

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 今天分享的内容是“如何利用数据驱动的高阶技巧提升学术论文的深度与说服力”。从高级统计分析到机器学习&#xff0c;再到数据可视化和模型验证&#xff0c;我们将提供了一整套策略&am…

在Linux上搭建服务器之综合实验(web,dns,防火墙,SELinux)

其实验简图如下&#xff1a; 解读&#xff1a; 本实验需要完成4部分内容&#xff0c;web服务器的搭建&#xff0c;主从dns服务器的搭建&#xff0c;防火墙的开启&#xff0c;以及SELinux设置为强制模式。 首先dns主服务器上配置web服务&#xff08;其中我本机的IP为192.168.5.…

基于Android平台开发,仿头条新闻app

相关视频教程在某站上面(&#x1f50d;浩宇软件开发) 1. 项目模块功能思维导图 2. 项目涉及到的技术点 数据来源&#xff1a;聚合数据API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现新闻列表使用SQLite数据库实现用户登录&#xff0…

数学建模·Topsis优劣解距离法

Topsis优劣解 一种新的评价方法&#xff0c;特点就是利用原有数据&#xff0c;客观性强。相较于模糊评价和层次评价 更加客观&#xff0c;充分利用原有数据&#xff0c;精确反映方案差距基本原理 离最优解最近&#xff0c;离最劣解越远具体步骤 正向化 代码与原理与熵权法…

防火墙第一次综合实验

DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00-18:00)可以访问&#xff0c;生产区的设备全天可以访问。 办公区设备10.8.2.1不允许访问DMZ区的FTP服务器和HTTP服务器&#xff0c;仅能ping通10.0.3.10 1.先建立拒绝BG到DMZ区的安全策略 2.建立BG到DMZ区的icmp允许 3…

探索 Electron:窗口菜单以及生命周期和对话框讲解

Electron是一个开源的桌面应用程序开发框架&#xff0c;它允许开发者使用Web技术&#xff08;如 HTML、CSS 和 JavaScript&#xff09;构建跨平台的桌面应用程序&#xff0c;它的出现极大地简化了桌面应用程序的开发流程&#xff0c;让更多的开发者能够利用已有的 Web 开发技能…

Linux文件编程(标准C库)

目录 一、标准C库打开/创建文件&#xff0c;读写文件&#xff0c;光标移动 二、标准C库写入结构体到文件 三、其他函数补充 1.fputc函数 2.feof函数和fgetc函数 前面讲到的open函数都是基于linux内核的&#xff0c;也就是说在Windows系统上无法运行&#xff0c;移植性比较…

shein测试开发会问些啥?

&#x1f3c6;本文收录于《CSDN问答解惑-》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

【thingsbord源码编译】 显示node内存不足

编译thingsbord显示报错 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory问题原因分析 重新安装java版本 编译通过

论文阅读【时空+大模型】ST-LLM(MDM2024)

论文阅读【时空大模型】ST-LLM&#xff08;MDM2024&#xff09; 论文链接&#xff1a;Spatial-Temporal Large Language Model for Traffic Prediction 代码仓库&#xff1a;https://github.com/ChenxiLiu-HNU/ST-LLM 发表于MDM2024&#xff08;Mobile Data Management&#xf…

无人机之遥控器保养

一、使用存放 1、避免让遥控器受到强烈的震动或从高处跌落&#xff0c;以免影响内部结构的精度&#xff1b; 2、遥控器在使用完后&#xff0c;需要将天线收拢&#xff0c;避免折断&#xff0c;养成定期检查天线的习惯&#xff1b; 3、定期检查遥控器按键有无裂纹、畸变、松旷…

跨境电商API的全球视野:打破地域限制,连接全球消费者与商家

在全球化日益加深的今天&#xff0c;跨境电商已成为推动全球经济一体化的重要力量。它不仅为消费者提供了前所未有的购物体验&#xff0c;让世界各地的商品触手可及&#xff0c;更为商家开辟了全新的市场蓝海&#xff0c;实现了业务的全球化拓展。在这一进程中&#xff0c;跨境…

PyTorch | 加速模型训练的妙招

引言 提升机器学习模型的训练速度是每位机器学习工程师的共同追求。训练速度的提升意味着实验周期的缩短&#xff0c;进而加速产品的迭代过程。同时&#xff0c;这也表示在进行单一模型训练时&#xff0c;所需的资源将会减少。简而言之&#xff0c;我们追求的是效率。 熟悉 PyT…

Rust代码优化的九大技巧

一.使用 Cargo 内置的性能分析工具 描述&#xff1a;Cargo 是 Rust 的包管理器&#xff0c;带有内置工具来分析代码性能&#xff0c;以识别性能瓶颈。 解释&#xff1a; 发布模式&#xff1a;在发布模式下编译启用优化&#xff0c;可以显著提高性能。 cargo build --release基…

解决vue多层弹框时存在遮挡问题

本文给大家介绍vue多层弹框时存在遮挡问题&#xff0c;解决思路首先想到的是找到对应的遮挡层的css标签&#xff0c;然后修改z-index值&#xff0c;但是本思路只能解决首次问题&#xff0c;再次打开还会存在相同的问题&#xff0c;故该思路错误&#xff0c;下面给大家带来一种正…

【鸿蒙学习笔记】文件管理

官方文档&#xff1a;Core File Kit简介 目录标题 文件分类什么是应用沙箱&#xff1f; 文件分类 应用文件&#xff0c;比如应用的安装包&#xff0c;自己的资源文件等。用户文件&#xff0c;比如用户自己的照片&#xff0c;录制的音视频等。 什么是应用沙箱&#xff1f; 应…