【网络】cookie

cookie 的组成

cookie是浏览器中特有的一个概念,它就像浏览器的专属卡包,管理着各个网站的身份信息。

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

  • key: 键,比如「身份编号」
  • value: 值,比如xxx的身份编号「14563D1550F2F76D69ECBF4DD54ABC95」,这有点像卡片的条形码,当然,它可以是任何信息
  • domain: 域,表达这个cookie是属于哪个网站的,比如 example.cn ,表示这个 cookie 是属于example.cn 这个网站的
  • path:路径,表达这个 cookie 是属于该网站的哪个基路径的,就好比是同一家公司不同部
    门会颁发不同的出入证。比如/news, 表示这个 cookie 属于 /news 这个路径的。
  • secure: 是否使用安全传输
  • expire: 过期时间,表示该 cookie 在什么时候过期

当浏览器向服务器发送一个请求的时候,它会瞄一眼自己的卡包,看看哪些卡片适合附带捎给服务
器。如果一个cookie同时满足以下条件,则这个cookie会被附带到请求中:

  • cookie没有过期
  • cookie中的域和这次请求的域是匹配的
    (比如 cookie 中的域是 xxx.tech, 则可以匹配的请求域是 xxx.tech 、 www.xxx.tech 、blogs.xxx.tech 等等;比如cookie中的域是 www.xxx.tech, 则只能匹配 www.xxx.tech 这样的域)
  • cookie是不在乎端口的,只要域匹配即可
  • cookie中的path和这次请求的path是匹配的
    (比如 cookie 中的path是 /news, 则可以匹配的请求路径可以是 /news、/news/detai1、/news/a/b/c 等等;如果cookie的path是 / ,可以想象,能够匹配所有的路径)
  • 验证cookie的安全传输
    • 如果cookie的secure属性是true,则请求协议必须是https,否则不会发送该 cookie
    • 如果cookie的secure属性是false,则请求协议可以是http,也可以是https

如果一个 cookie 满足了上述的所有条件,则浏览器会把它自动加入到这次请求头中。

设置 cookie

由于 cookie 是保存在浏览器端的,同时,很多证件又是服务器颁发的。

所以,cookie 的设置有两种模式:

  • 服务器响应:这种模式是非常普遍的,当服务器决定给客户端颁发一个证件时,它会在响应的
    消息中包含 cookie, 浏览器会自动的把 cookie 保存到卡包中
  • 客户端自行设置:这种模式少见一些,不过也有可能会发生,比如用户关闭了某个广告,并选
    择了【以后不要再弹出】,此时就可以把这种小信息直接通过浏览器的JS代码保存到 cookie
    中。后续请求服务器时,服务器会看到客户端不想要再次弹出广告的 cookie, 于是就不会再
    发送广告过来了。

服务端设置 cookie:

当这样的响应头到达客户端后,浏览器会自动的将cookie保存到卡包中,如果卡包中已经存在一模一样的卡片(其他path、domain相同),则会自动的覆盖之前的设置。

后续浏览器对服务器的请求,只要满足条件,cookie 就会被附带到请求头中传给服务器。

删除 cookie 直接让 cookie 的时间过期即可 max-age=-1

相关配置

  1. Name-Value Pair: 每个cookie都由一个名称(name)和一个值(value)组成,这是cookie的基本组成部分 set-cookie: cookie1

  2. Expires/Max-Age:

    • Expires: 设置一个具体的日期,告诉浏览器在该日期之后cookie将不再有效。
    • Max-Age: 设置一个相对于创建时间的秒数,告诉浏览器在这段时间之后cookie将过期。
  3. Domain: 指定了cookie有效的域名。只有当访问这个域名时,cookie才会被发送到服务器。

  4. Path: 指定了cookie有效的路径。只有当访问这个路径时,cookie才会被发送。

  5. Secure: 当这个属性被设置时,cookie只有在加密的HTTPS连接中才会被发送,增加了安全性。

  6. HttpOnly: 设置这个属性可以防止JavaScript通过document.cookie访问cookie,减少跨站脚本攻击(XSS)的风险。

  7. SameSite: 控制浏览器发送cookie的时机,可以设置为StrictLaxNone,用于防止跨站请求伪造(CSRF)攻击。

    • Strict: 只有在相同的网站发起的请求中才会发送cookie。
    • Lax: 允许从一个站点发起的请求,如果该请求是顶级导航(如点击链接或提交表单),则可以发送cookie。
    • None: 允许在任何情况下发送cookie,除非设置了Secure属性。
  8. Priority: 一些浏览器支持设置cookie的优先级,如LowMedium(默认)、High,影响浏览器存储和检索cookie的顺序。

  9. Host-Only: 某些浏览器允许将cookie标记为仅用于主机名,而不是子域。

  10. Port: 可以指定cookie有效的端口号。如果未指定,则默认为发送cookie的端口。

  11. Version: 指定了cookie的版本(如RFC 2109或RFC 6265),不同的版本有不同的属性和行为。

  12. Comment: 可以包含一个注释,说明cookie的用途,但浏览器通常不会使用这个信息。

  13. Discard: 如果设置,表明cookie是一个会话cookie,当用户关闭浏览器时将被删除。

  14. Priority: 在某些浏览器中,可以设置cookie的优先级,影响它们在存储和检索时的顺序。

  15. Samesite Attribute: 用于控制cookie在跨站请求时的行为,有助于防止CSRF攻击。

客户端设置 cookie:

document.cookie="键=值; path=?; domain=?; expire=?; max-age=?; secure";

登录中的使用

登录请求

  1. 浏览器发送请求到服务器,附带账号密码
  2. 服务器验证账号密码是否正确,如果不正确,响应错误,如果正确,在响应头中设置
    cookie, 附带登录认证信息(jwt)
  3. 客户端收到 cookie, 浏览器自动记录下来

后续请求

  1. 浏览器发送请求到服务器,希望添加一个管理员,并将 cookie 自动附带到请求中
  2. 服务器先获取 cookie, 验证 cookie 中的信息是否正确,如果不正确,不予以操作,如果正
    确,完成正常的业务流程

cookie、sessionStorage 和 localStorage 的区别

cookie、sessionStorage、localStorage都是保存本地数据的方式。

其中,cookie 兼容性较好,所有浏览器均支持。浏览器针对 cookie 会有一些默认行为,比如当响应头中出现 set-cookie 字段时,浏览器会自动保存 cookie 的值;再比如,浏览器发送请求时,会附带匹配的 cookie 到请求头中。这些默认行为,使得 cookie 长期以来担任着维持登录状态的责任。与此同时,也正是因为浏览器的默认行为,给了恶意攻击者可乘之机,CSRF 攻击就是一个典型的利用 cookie 的攻击方式。虽然 cookie 不断的改进,但前端仍然需要另一种更加安全的保存数据的方式。

HTML5 新增了 sessionStorage 和 localStorage, 前者用于保存会话级别的数据,后者用于更持久的保存数据。浏览器针对它们没有任何默认行为,这样一来,就把保存数据、读取数据的工作交给了前端开发者,这就让恶意攻击者难以针对登录状态进行攻击。

cookie 的大小是有限制的,一般浏览器会限制同一个域下的 cookie 总量为4M, 而sessionStorage和localStorage则没有限制。

cookie 会与 domain、path 关联,而 sessionStorage 和 localStorage 只与 domain 关联。

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

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

相关文章

vivado Miscellaneous Net-Related Constraints

Miscellaneous Net-Related Constraints KEEP Applied To Nets Constraint Values • TRUE • FALSE UCF Example net x_int KEEP TRUE; XDC Example set_property DONT_TOUCH true [get_nets x_int] SAVE NET FLAG Applied To Nets Constraint Values N/A …

Element-UI快速入门指南

一、引言 在前端开发领域,Vue.js以其简洁的API和灵活的组件系统受到了广泛的欢迎。Element-UI则是一套基于Vue.js 2.0的桌面端组件库,它提供了丰富的组件和友好的API,帮助开发者快速构建出美观且功能强大的Web应用。本文将带你快速入门Eleme…

信号:MSK调制和GMSK调制

目录 一、MSK信号 1. MSK信号的第k个码元 2.MSK信号的频率间隔 3.MSK信号的相位连续性 3.1 相位路径 3.2初始相位ψk 4.MSK信号的产生 原理框图 5.MSK信号的频谱图 二、高斯最小频移键控(GMSK) 1.频率响应 2.GMSK调制产生方式 2.1 高斯滤波器法 2.2 正交调制器法…

海外私人IP和原生IP有什么区别,谁更有优势?

一、什么是海外私人IP?什么是原生IP? 1、海外私人IP: 海外私人IP是由专门的服务提供商提供的IP地址,这些IP地址通常与特定地理位置或国家相关联。这些IP地址独享私人而不用与其他用户共享。海外私人IP广泛应用与跨境电商中&#x…

【Qt】修改QToolButton图标颜色

1. 目的 修改QToolButton的图标颜色,单一颜色,效果类似于Qt Creator左边选项卡。 2. 代码 QIcon MainWindow::setIconColor(QIcon icon, QColor color) {QPixmap pixmap icon.pixmap(QSize(64,64));QPainter painter(&pixmap);painter.setCompo…

DockerK8s

Docker&K8s 1. Docker 1.1 Docker是什么 用于构建容器化平台的软件,进程管理软件,主要用于部署应用程序并守护应用进程。容器是由docker软件启动的业务集成,该进程由docker全权管理。容器是进程,由内核机制来完成容器隔离。…

汇编:函数以及函数参数传递

汇编语言中的函数(或过程)是指一段可以被调用和执行的代码块;它们用于组织和重用代码,并使程序结构更加清晰;由于汇编语言没有高层次语言的语法糖,编写和调用函数涉及直接的堆栈操作和寄存器管理&#xff1…

c++网络开发笔记

1、第一节 1、阻塞模型 2、非阻塞IO 1)忙等待 2)IO复用模式(select,管理多个文件描述符号) 3)信号驱动IO,通过信号的方式 4)异步模型aio_read 3、select模型 int select(int nfds, fd_set *readfds, fd_set* writefds,fd_set* exceptfds, struct timeval* timeout);n…

Docker打包nginx镜像丢失挂载的配置文件

一般来说,Docker镜像构建过程中,如果没有正确地将配置文件复制到镜像中,那么在运行容器时就会丢失挂载的配置文件。 所以有2种解决办法: 第一种: 将挂载在宿主机上的配置文件复制到镜像中,可以参考这位老铁的文章《D…

多项式重构的平滑和法线估计-------PCL

多项式重构的平滑和法线估计 /// <summary> /// 多项式重构的平滑和法线估计 /// </summary> /// <param name"cloud"></param> /// <returns>输出一个包含平滑后的点云数据以及相应法线信息的数据结构</returns> pcl::PointCl…

28v电源 28V电源系统 28v航空电源系统概述

28V电源是指一种工作电压为28V的直流电源系统&#xff0c;主要用于航空电子、航天、J事和高端工业应用中。它通常用于为复杂的电子设备和系统供电&#xff0c;如飞机上的导航、通信、控制面板、计算机系统等。这些设备需要稳定的电压输入&#xff0c;而28V电压既能够保证电力供…

Docker 存储路径修改教程

简介 Docker 在长时间使用后&#xff0c;可能会因为镜像和容器的积累导致默认存储空间不足。本技术文档将指导您如何安全地将 Docker 的镜像和容器存放路径修改至挂载的磁盘中&#xff0c;以解决空间不足的问题。请确保在操作前&#xff0c;您的目标磁盘已经成功挂载。 查看 …

双向长短期记忆网络(BiLSTM)简介

双向长短期记忆网络&#xff08;Bidirectional Long Short-Term Memory, BiLSTM&#xff09;是一种改进的循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;&#xff0c;专门设计用于处理序列数据。BiLSTM 能够通过结合前向和后向两个 LSTM 网络的输出来捕捉…

第12周作业--HLS入门

目录 一、HLS入门 二、HLS入门程序编程 创建项目 1、点击Vivado HLS 中的Create New Project 2、设置项目名 3、加入文件 4、仿真 3、综合 一、HLS入门 1. HLS是什么&#xff1f;与VHDL/Verilog编程技术有什么关系? HLS&#xff08;High-Level Synthesis&#xff0c…

(Askchat.ai、360智脑、鱼聪明、天工AI、DeepSeek)

目录 1、Askchat.ai - 梦想为蓝图&#xff0c;ChatGPT为笔。 2、360智脑 — 以人为本&#xff0c;安全可信 3、鱼聪明AI - 做您强大的AI助手 (yucongming.com) 4、天工AI-搜索、对话、写作、文档分析、画画、做PPT的全能AI助手 (tiangong.cn) 5、DeepSeek | 深度求索 1、Askch…

基于STM32实现智能风扇控制系统

目录 文章主题环境准备智能风扇控制系统基础代码示例&#xff1a;实现智能风扇控制系统 PWM控制风扇速度温度传感器数据读取串口通信控制应用场景&#xff1a;智能家居与环境调节问题解决方案与优化收尾与总结 1. 文章主题与命名 文章主题 本教程将详细介绍如何在STM32嵌入式…

Docker Desktop安装和如何在WSL2中使用Docker

最近在使用WSL的过程中&#xff0c;想使用docker遇到了一些问题&#xff0c;在WSL中安装Linux版本的docker&#xff0c;启动镜像之后不能从Windows机器的端口映射出来&#xff0c;查了一圈之后&#xff0c;发现应该使用Docker Desktop软件&#xff0c;下面是安装和使用的方式 …

[源码+搭建教程]西游伏妖篇手游_GM_单机+和朋友玩

为了学习和研究软件内含的设计思想和原理&#xff0c;本人花心血和汗水带来了搭建教程&#xff01;&#xff01;&#xff01; 教程不适于服架设&#xff0c;严禁服架设&#xff01;&#xff01;&#xff01;请牢记&#xff01;&#xff01;&#xff01; 教程仅限学习使用&…

深入解析自注意力机制(Self-Attention):深度学习中的关键创新

Self-Attention 深入解析自注意力机制&#xff08;Self-Attention&#xff09;&#xff1a;深度学习中的关键创新自注意力机制的起源自注意力机制的工作原理关键组件公式表达 自注意力机制的应用结论 深入解析自注意力机制&#xff08;Self-Attention&#xff09;&#xff1a;深…

26条提示词工程策略

#原则中文原则1No need to be polite with LLM so there is no need to add phrases like “please”, “if you don’t mind”, “thank you”, “I would like to”, etc., and get straight to the point.不需要对 LLM 使用礼貌用语&#xff0c;因此无需添加诸如“请”、“如…