数据交互系列:认识 cookie

news2024/9/28 7:26:08

cookie的原理

  • http本身是一个无状态的请求,cookie最初的原始目的是为了维持状态而产生的。
  • 在首次访问网站时,浏览发送请求中并未携带cookie,即发送无状态请求
  • 服务器接受请求之后会在请求上的respond header上加入cookie相关信息并返回给浏览器,第一次浏览器看到请求中未携带Cookie,在HTTP的响应头中加入Set-Cookie
  • 浏览器收到Set-Cookie,会将cookie保存下来
  • 下次再向服务器发送请求时都会同步的带上cookie,那这样cookie就会附带再每一个http请求上,服务器也可以根据这些信息来进行相关的逻辑判断

在这里插入图片描述
在这里插入图片描述

cookie如何生成

  • 服务端生成,在Http Response Header中 Set-Cookie
  • 客户端生成 document.cookie,在浏览器中使用js,可以直接设置Cookie。一次只能设置一个Cookie。但是可以同时对单个Cookie的属性进行设置,每个属性使用分隔符;。
// Cookie都是name=value的结构,name和value都为字符串
document.cookie="USERNAME=胡文浩"
document.cookie="COURSE=what is cookie"

cookie的缺陷

  • Cookie设计的初衷 用于维持HTTP状态(让无状态的请求变成有状态),不用于存储数据。
  • 每个cookie项只能存储4k的数据。
  • 性能浪费:cookie附带在http请求上,数据量过大,会导致每个http的请求非常庞大,耗费流量和带宽。

关于cookie的补充

http协议是无状态的,并且请求成功后连接会断开,他无法确定这一次请求的客户端,就是之前登录成功的那个客户端。理论上,每次请求都可以带上账号和密码就可以解决这个问题,但是太麻烦。

所以,一般客户端登录成功后,服务器会给客户端一个"出入证",客户端只需要一个卡包来保存一个或多个出入证,后续客户端的每次请求,都必须自动附带这个出入证。并且客户端能够正确的正确的出示"出入证",当"出入证"过期也能自动的从卡包中移除。

因为localstorage是html5之后出来的,而且localstorage需要手动触发,所以。能满足上述要求的只能使用cookie。

5.1、cookie的组成

cookie就像是浏览器的专属卡包,管理各个网站的身份信息

每个cookie就相当于是属于某个网站的一个卡片,它记录了以下信息:

  • key:键
  • value:值
  • domain:域 属于哪一个网站
  • path:路径 属于哪个网站的哪个基路径 好比是一个公司不同部门有不同的权限
  • secure:是否使用安全传输
  • expire:过期时间

当浏览器向服务器发送请求时,它会找有无cookie,如果有,就把cookie自动附带到请求中发给服务器。

5.2、可以被附带到请求中的cookie需同时满足以下条件:

  • cookie没有过期
  • cookie中的域与请求的域是匹配的,不在乎端口
  • cookie中的基路径要与请求的路径匹配
    • cookie中的path为/ 可匹配 /a /b /a/b
  • 验证cookie的安全传输
    • cookie里的secure属性是true 必须是https才能发送cookie
    • cookie里的secure属性是false 可以https发送cookie也可以http

5.3、如何附带到请求中

浏览器会将符合条件的cookie,自动放置到请求头中

例如:

Cookie:a=1;b=2;c==3 分号分隔

cookie包含着重要信息,特别是登录成功后返回的cookie,虽然存储在浏览器中,但是不能泄露cookie。

5.4、如何设置Cookie

5.4.1、cookie的来源
  • 服务器响应

    • 服务器可以通过设置响应头,来告诉浏览器应该如何设置cookie

      响应头按照下面的格式设置

      set Cookie:cookie1
      set Cookie:cookie2
      set Cookie:cookie3
      

      每个cookie的格式如下

      =;path=?;domain=?;expire=?;max-age=7?;secure;httponly
      

      键和值必须设置,其他属性可选

      path路径默认用当前请求的路径

      domain域默认设置为当前的请求域

      expire(字符串 格林威治时间)和max-age(max-age:1000表示当前时间+1000秒)设置过期时间 设置一个即可;默认会话结束后过期

      secure 设置后下一次请求只能是https才能带上该cookie

      httponly 只能传输,不能通过js获取,这对防止跨站脚本攻击很有效

    • 举例:
      客户端通过post请求服务器http://huwenhao.com,并在消息体重给予了账户和密码,服务器验证登录成功后,在响应头中加入了如下内容

      set-cookie:token=12345;domain=huwenhao.com;path=/;max-age=3000;httponly

      客户端接收后自动的创建下面的cookie放入cookie卡包

      key:token
      value:12345
      domain:huwenhao.com
      path:/
      expire:2020-04-07 19:20:30
      secure:false
      httponly:true
      

      于是,随着后续当前浏览器对服务器的请求,只要满足要求cookie就会覆盖到请求头上。

      cookie:token=123456;其他cookie.... //用;隔开
      
  • 客户端设置
    document.cookie 获取所有cookie
    document.cookie="键-值;path=?;domain=?;expire=?;max-age=?;secure" 设置cookie

5.4.2、如何删除cookie

1.cookie自动过期
2.没过期的情况下,让服务器响应一个相同域,相同域,相同key,时间过期的cookie
set-cookie:token=;domainhuwenhao.com;path=/;max-age=-1

【注意】:可能会存在不同的域,不同的路径,但key相同的cookie,所以无法凭借key确定是哪一个cookie

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

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

相关文章

【计算机组成原理】通过带符号整数的减法运算中加法器的溢出标志 OF 和符号标志 SF 对两个带符号整数的大小进行比较

对于带符号整数的减法运算,能否直接根据 CF 的值对两个带符号整数的大小进行比较? 对于带符号整数的减法运算,不能直接根据CF(进/借位标志)的值对两个带符号整数的大小进行比较。 CF标志位在带符号整数运算中主要用于…

使用Python+selenium3.0实现第一个自动化测试脚本

这篇文章主要介绍了使用Pythonselenium实现第一个自动化测试脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 最近在学web自动化,记录一下学习过程。…

冬天夺去的清爽,可爱,春天都会还给你

这款外套上身可太时尚好看了 春天日常穿着或者出行游玩 应对早晚温差,兼具时尚和温度两不误 干净率性闲适的洒脱范整件衣服干净不失细节 下摆有橡筋收紧更加保暖了工艺方面也毫不逊色,防水拉链 四合扣、猪鼻扣一应俱全简直就是一件实用与时尚并存的…

Spring Boot实现数据加密脱敏:注解 + 反射 + AOP

文章目录 1. 引言2. 数据加密和脱敏的需求3. Spring Boot项目初始化4. 敏感数据加密注解设计5. 实现加密和脱敏的工具类6. 实体类和加密脱敏注解的使用7. 利用AOP实现加密和脱敏8. 完善AOP切面9. 测试10. 拓展功能与未来展望10.1 加密算法的选择10.2 动态注解配置 11. 总结 &am…

ReentrantLock底层原理学习一

J.U.C 简介 Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的 Doug Lea。我们在接下来的课程中,回去剖析一些经典的比较…

【Docker基础三】Docker安装Redis

下载镜像 根据自己需要下载指定版本镜像,所有版本看这:Index of /releases/ (redis.io) 或 https://hub.docker.com/_/redis # 下载指定版本redis镜像 docker pull redis:7.2.0 # 查看镜像是否下载成功 docker images 创建挂载目录 # 宿主机上创建挂…

AQS 抽象队列同步器

AQS AQS (抽象队列同步器): AbstractQueuedSynchronizer 是什么 来自jdk1.5,是用来实现锁或者其他同步器组件的公共基础部分的抽象实现,是重量级基础框架以及JUC的基石,主要用于解决锁分配给谁的问题整体…

vue2中vuex详细使用

1.安装 说明:也就是版本号,一般vue2安装vuex3。 npm i vuex3.6.2 2.搭建架子 执行流程如下: 初始化状态:在state对象中定义了一个名为message的属性,并将其初始值设置为"启动"。 定义变更函数&#xff08…

【算法专题】FloodFill 算法

FloodFill 算法 1. 图像渲染 题目链接 -> Leetcode -773.图像渲染 Leetcode -773.图像渲染 题目:有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。 你也被给予三个整数 sr, sc 和 newColor 。你应该从…

jumpServer-02-安装与配置

jumpServer-02-安装与配置 文章目录 jumpServer-02-安装与配置一、什么是jumpServer?二、jumpServer安装配置①:初始化配置01:Linux服务器准备02:环境准备,关闭防火墙03: 配置yum源04:安装系统初始化所需的…

Python 入门练习

练习1:打印“hello world” print(hello world) 练习2:用户输入一个三位自然数,计算并输出其百位,十位和个位上的数字。 x input(请输入一个三位自然数:) print(*map(int,x)) 运行结果: 练习3&#x…

学习JavaEE的日子 day10 一维数组的深入,二维数组

day10 1.eclipse的使用 Eclipse是一款功能强大的集成开发环境(IDE),主要用于开发Java应用程序。 1.项目(Project):项目是为满足特定需求而创建的代码文件集合。一个工作区可以包含多个项目,而您…

超维空间M1无人机使用说明书——01、ROS机载电脑使用说明——远程连接

引言:远程连接通常采用两种方式,一种是通过可视化软件,如VNC、Nomachine等,另外一种是使用SSH。各有优缺点,两种远程登录方式的优缺点做一个简单的对比: 1、SSH优缺点 优点:1、消耗网络资源 2、运行稳定 …

基于SSM的网上购物平台设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

JavaScript常用事件演示

文章目录 一、在JavaScript中什么是事件?二、什么是JavaScript 常用事件?三、常用JS事件代码示例:四、事件总结 一、在JavaScript中什么是事件? JavaScript 使我们有能力创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个…

基于Vue开发的一个仿京东电商购物平台系统(附源码下载)

电商购物平台项目 项目完整源码下载 基于Vue开发的一个仿京东电商购物平台系统 Build Setup # csdn下载该项目源码压缩包 解压重命名为sangpinghui_project# 进入项目目录 cd sangpinghui_project# 安装依赖 npm install# 建议不要直接使用 cnpm 安装以来,会有各…

Python异常捕获和处理语句 try-except-else-finally

目录 try-except-else-finally语句 1. 基本用法 2. 多个异常处理 3. 处理所有其他异常 4. 多个except子句 5. 使用else子句 6. 使用finally子句 7. 使用as关键字 实例 例1 例2 例3 例4 例5 例6 例7 例8 结论 try-except-finally语句 在Python中,try-e…

基于差分进化算法优化的Elman神经网络数据预测 - 附代码

基于差分进化算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于差分进化算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于差分进化优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

基于Springboot的摄影跟拍预定管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的摄影跟拍预定管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

前端框架中的状态管理(State Management)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…