HTTP Cookie 你了解多少?
Cookie是什么?
先给大家举个例子,F12 打开浏览器的页面之后,我们能在 Response Headers 的字段里面看到一个header 叫做 Set-Cookie,如下所示

图中包含的 Set-Cookie 为
Set-Cookie:uuid_tt_dd=10_20293537580-1709432565344-232525; Expires=Thu, 01 Jan 2025 00:00:00 GMT; Path=/; Domain=.csdn.net
这个例子中,uuid_tt_dd 的值为 10_20293537580-1709432565344-232525,这个cookie 在2025 年 1 月 1 日过期,只能由 .csdn.net 域和其根路径下的页面访问,我们可以在浏览器调试模式下的 Application 中找到uuid_tt_dd被浏览器记录下来的样式。

当发起新的请求时,Cookie 会出现在请求的 Request Headers中。

从这里我们可以看到,Request Headers里面的 Cookie 中记录了 uuid_tt_dd。
基础交互流程如下所示

Cookie 说白了就是一个 http 协议中的 header 字段,这个字段会由被访问的网站放在response-header 中通过 Set-Cookie 返回,当用户浏览该网站时,浏览器存储 Cookie 后,下次访问会将该值带上,那么这个值的信息代表什么含义?这是可以由网站开发者定义的,可以在这个值中存一些如登录状态的信息,这样当请求携带 cookie 时,信息会被读取以帮助网站记住用户的访问信息和偏好设置,使得网站能够为用户提供个性化的浏览体验,并可以用于追踪用户在网站上的行为。
Cookie分类和属性含义
属性
Cookie在HTTP协议中位于HTTP头部。它有多个属性,包括:Expires/Max-Age,Domain,Path,Secure,HttpOnly,SameSite等,这些属性帮助控制Cookie的安全性和使用范围。
Expires/Max-Age: Expires 和 Max-Age 是 Cookie 的两个属性,用于定义 Cookie 的有效期。Expires 指定了 Cookie 的过期日期和时间,浏览器会在这个时间后删除 Cookie。它使用特定的日期格式,如 Expires=Wed, 09 Jun 2021 10:18:14 GMT 。Max-Age 指定了从当前时间开始,Cookie 存在的秒数。例如,Max-Age=3600 表示 Cookie 将在一小时后过期。如果同时指定了 Expires 和 Max-Age ,Max-Age 具有更高的优先级。
Domain: Domain 属性定义了哪些域名可以接收 Cookie。设置 Domain 属性后,不仅当前域名下的页面可以访问这个 Cookie,指定的域以及其子域也能访问。例如,如果一个Cookie 的 Domain 属性被设置为 example.com ,那么 www.example.com 和subdomain.example.com 等都可以访问这个 Cookie。这有助于跨子域共享 Cookie信息,但也需要谨慎使用以避免安全问题。。
Path: Path 属性指定了哪些网站路径下的页面可以访问 Cookie。如果设置了 Path=/blog ,那么只有网址下的 /blog 目录及其子目录中的页面能够访问这个 Cookie。这有助于限制 Cookie 的访问范围,确保只有特定部分的网站可以使用该 Cookie,从而提高网站的安全性和数据的准确性。。
Secure: Secure 属性标记 Cookie 仅通过安全的 HTTPS 连接发送。Secure 属性设置后,Cookie 只会在 HTTPS 请求中被发送。这有助于防止 Cookie 在数据传输过程中被窃听,增强了用户数据的安全性。
HttpOnly: 当 Cookie 设置为 HttpOnly 时,意味着这个 Cookie 只能通过 HTTP 协议被服务器访问,而不能通过客户端脚本(如 JavaScript )访问,这有助于增强安全性,防止跨站脚本攻击( XSS )。这种设置不限制 Cookie 通过 HTTP 或 HTTPS 协议传输,主要目的是提高安全性,确保只有服务器能够读取 Cookie 信息。
SameSite: SameSite 属性用于控制 Cookie 在跨站请求中的发送行为,有助于防止跨站请求伪造攻击(CSRF)。它有三个值:Strict 、Lax 和 None。 Strict 只允许来自相同站点的请求发送 Cookie;Lax 允许某些第三方请求发送 Cookie,例如从其他网站导航到链接的情况;None 允许所有跨站请求发送Cookie,但必须与 Secure 属性一起使用,确保Cookie仅通过安全连接发送。不设置SameSite属性和将SameSite设置为None在效果上不完全相同,未明确设置 SameSite 属性时,浏览器可能会使用默认行为,这在不同的浏览器和版本中可能有所不同。而明确将 SameSite 设置为 None 则指示浏览器在所有跨站请求中发送 Cookie,但这必须与 Secure 属性一起使用,以确保Cookie仅通过 HTTPS传输。因此,明确设置提供了更明确的控制和跨浏览器的一致性。
一个包含多种属性的Cookie例子可能是这样的:
Set-Cookie: UID=Jack; Expires=Wed, 09 Jun 2023 10:18:14 GMT; Domain=example.com; Path=/; Secure; HttpOnly; SameSite=Strict
这个例子中,UID 是设置给用户 Jack 的Cookie,它在2023年6月9日过期,只能由example.com域和其根路径下的页面访问。此Cookie仅通过HTTP传输,不允许JavaScript访问,且设置了SameSite为Strict,限制跨站点的发送。
类型
Cookie可以分为多种类型,包括基于生命周期的会话Cookie和持久Cookie;基于来源的第一方Cookie和第三方Cookie;以及基于功能的安全Cookie、HttpOnly Cookie、偏好Cookie、认证Cookie和跟踪/广告Cookie。还有其他特殊类型,如僵尸Cookie、Flash Cookie(本地共享对象)、超级Cookie和SameSite Cookie,它们在安全性、用户跟踪和广告方面各有用途。这些分类帮助网站在为用户提供个性化体验的同时,确保交互的安全性和遵守隐私法规。
第一方 Cookie(First-party cookies):第一方Cookie是由用户直接访问的网站创建并设置的,它们通常用于记住用户信息和偏好,如登录状态、语言选择、主题偏好等,以便在用户再次访问网站时提供更个性化的体验第一方Cookie仅为当前访问的网站所用,不会被其他网站访问或共享。
第三方Cookie(Third-party cookies):三方Cookie(Third-party cookies)是由非当前用户正在访问的网站域设置的Cookie。它们主要用于跨站跟踪,允许第三方收集用户在不同网站上的浏览信息,从而用于广告定位、分析和个性化服务等目的。三方Cookie通常通过第三方广告或者网页元素(如图像、广告横幅、或者社交媒体插件等)嵌入到网页中来设置和访问。
举例来说,如果你访问一个网站,这个网站包含了一个第三方广告公司的广告,那么这个广告公司可能会在你的设备上设置一个Cookie,即使这个广告公司的网站你并没有直接访问过。随后,当你访问其他包含同一广告公司广告的网站时,该公司可以读取其之前在你设备上设置的Cookie,从而跟踪你的网上行为,分析你的兴趣和偏好,以便提供更加个性化的广告。
会话Cookie(Session cookies):会话Cookie是临时的Cookie,用于记住用户在浏览器会话期间的活动。当用户关闭浏览器窗口时,这些Cookie会被自动删除。它们对于保持用户登录状态、购物车中的商品等在短期内的信息至关重要。会话Cookie不需要指定过期时间(Expires)或最大年龄(Max-Age)属性。当创建Cookie时,省略这些属性,浏览器就会把它当作会话Cookie处理,这意味着用户关闭浏览器窗口后,Cookie会被自动删除。
持久Cookie(Persistent cookies):持久Cookie在用户的设备上存储更长时间,直到它们到达设定的过期日期或被用户手动删除。这类Cookie用于记住用户的登录信息、偏好设置和在多次访问之间跟踪用户的活动。
相关文章:
HTTP Cookie 你了解多少?
Cookie是什么? 先给大家举个例子,F12 打开浏览器的页面之后,我们能在 Response Headers 的字段里面看到一个header 叫做 Set-Cookie,如下所示 图中包含的 Set-Cookie 为 Set-Cookie:uuid_tt_dd10_20293537580-1709432565344-232…...
【QT+QGIS跨平台编译】之五十六:【QGIS_CORE跨平台编译】—【qgsmeshcalclexer.cpp生成】
文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…...
ar时间序列
AR时间序列模型(AutoRegressive Time Series Model)是一种用于分析和预测时间序列数据的统计模型。该模型假设未来的观测值与过去的观测值相关,且该相关性可以通过线性回归来描述。 AR模型的基本思想是将当前时刻的观测值表示为过去几个时刻的…...
Android 14 AAOS audio
文章目录 乘客音频投放到主音频区动态路由配置controlhal实现的具体流程control hal AudioGain的callbackAudioModuleChange变化的通知 乘客音频投放到主音频区 场景: 是将乘客区的Media 属性的数据通过主屏区的设备进行播放。具体而言 在副屏user11播放的音乐是输出…...
文心一言 VS 讯飞星火 VS chatgpt (207)-- 算法导论15.4 4题
四、说明如何只使用表 c 中 2*min(m,n) 个表项及O(1)的额外空间来计算LCS的长度。然后说明如何只用 min(m,n) 个表项及O(1)的额外空间完成相同的工作。要写代码的时候,请用go语言。 文心一言: 在只使用 2 * min(m, n) 个表项和 …...
【论文笔记】Attention Is All You Need
【论文笔记】Attention Is All You Need 文章目录 【论文笔记】Attention Is All You NeedAbstract1 Introduction2 Background补充知识:软注意力 soft attention 和硬注意力 hard attention?补充知识:加法注意力机制和点乘注意力机制Extende…...
(亲测可用)Adobe Photoshop 2024下载与安装
背景介绍:Adobe Photoshop 2024 是全球最受欢迎的图像编辑软件之一,2024年的版本带来了一系列令人印象深刻的功能: AI增强的自动选择和蒙版工具:现在,用户可以更轻松地选择和处理复杂的图像元素。更多的3D渲染功能&…...
uniapp聊天记录本地存储(详细易懂)
目录 目录 1、通过websocket拿取数据 2、获取聊天数据 3、聊天信息存储 、更新 4、读取聊天记录 5、发送信息,信息获取 6、最终效果 1.聊天信息的存储格式 2、样式效果 写聊天项目,使用到了本地存储。需要把聊天信息保存在本地,实时获…...
Vue.js中的$nextTick
其实目前在我现有的开发经历中,我还没有实际运用过$nextTick,今天在看书时,学习到了这个东西,所以做个笔记记录一下。 一、$nextTick是什么? $nextTick 是 Vue提供的一个方法,用于在 DOM 更新之后执行回调…...
python+mysql咖啡店推荐系统django+vue
(1).研究的基本内容 系统的角色分为: 1.管理员 2.会员 3.非会员 角色不同,权限也不相同 技术栈 后端:python 前端:vue.jselementui 框架:django/flask Python版本:python3.7 数据库:mysql5.7…...
综合实验nginx+nfs+kpa
综合实验 实验目的: 静态资源和动态资源分别存放在远端存储NFS上,NFS上数据实现实时备份,用户通过负载访问后端的web服务。实现ngixn负载高可用,当keepalived master宕机,vip能自动跳转到备用节点 实验环境ÿ…...
springboot197基于springboot的毕业设计系统的开发
简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的毕业设计系统的开发 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 …...
group by报错
# 报错:[42000][1055] Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column base.biz_org_rep.ID which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_grou…...
3、云原生安全之falco的部署
文章目录 1、helm安装2、拉去镜像失败与解决3、安装faclo4、安装nfs服务器,配置k8s的持久卷4.1、创建nfs服务器,4.2、部署master节点(nsf服务的客户端)4.3、pv与pvc4.4、假设pv和pvc的配置文件出错了5、安装falcosidekick可视化(建议跳过,直接使用6)6、安装faclo与falco…...
Docker架构概述
Docker是基于Go语言实现的开源容器项目,能够把开发的应用程序自动部署到容器的开源的应用容器引擎。Docker的构想是要实现"Build, Ship and Run Any App, Anywhere",即通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运…...
安装 node 错误的配置环境变量之后使用 npm 报错
安装 node 错误的配置环境变量之后使用 npm 报错 node:internal/modules/cjs/loader:1147 throw err; ^ Error: Cannot find module ‘F:\ACodeTools\Node\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js’ at Module._resolveFilename (node:internal/modules/cjs/loa…...
Matlab 最小二乘插值(曲线拟合)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在多项式插值时,当数据点个数较多时,插值会导致多项式曲线阶数过高,带来不稳定因素。因此我们可以通过固定幂基函数的最高次数 m(m < n),来对我们要拟合的曲线进行降阶。之前的函数形式就可以变为: 二、实现…...
AWTK-MVVM 配置文件模型
配置文件模型 AWTK-MVVM 内置了一些配置文件模型,用于读写各种配置文件,比如,JSON/XML/INI/CSV/UBJSON 等。 文件名中可以引用下面的变量。 ${app_dir} 应用程序目录${user_dir} 用户目录${temp_dir} 临时目录 json(url${app_dir}/demos/de…...
【活动】金三银四,前端工程师如何把握求职黄金期
随着春意盎然的气息弥漫大地,程序员群体中也迎来了一年一度的“金三银四”求职热潮。这个时间段对于广大前端工程师而言,不仅象征着生机勃发的新起点,更是他们职业生涯中至关重要的转折点。众多知名公司在这一时期大规模开启招聘通道…...
萌新学习RSA第二天(离线分解整数N)
1.yafu的使用(离线环境分解N)、 下载 打开 及使用 下载地址:https://sourceforge.net/projects/yafu/ 在下载好的并解压好的文件夹上鼠标右键打开终端 然后输入.\yafu-x64.exe并回车运行 .\yafu-x64.exe 来到这个页面就OK了 然后输入 fa…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
深入理解 C++ 左值右值、std::move 与函数重载中的参数传递
在 C 编程中,左值和右值的概念以及std::move的使用,常常让开发者感到困惑。特别是在函数重载场景下,如何合理利用这些特性来优化代码性能、确保语义正确,更是一个值得深入探讨的话题。 在开始之前,先提出几个问题&…...
基于django+vue的健身房管理系统-vue
开发语言:Python框架:djangoPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat12开发软件:PyCharm 系统展示 会员信息管理 员工信息管理 会员卡类型管理 健身项目管理 会员卡管理 摘要 健身房管理…...
