HTTP Cookie 你了解多少?

news2024/9/29 15:23:27

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被浏览器记录下来的样式。
Reuqest Headers

当发起新的请求时,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://www.coloradmin.cn/o/1485543.html

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

相关文章

Maven(黑马学习笔记)

初识Maven 什么是Maven Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。 官网:https://maven.apache.org/ Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会&#xff0…

Sqli-labs靶场第15关详解[Sqli-labs-less-15]自动化注入-SQLmap工具注入

Sqli-labs-Less-15 #自动化注入-SQLmap工具注入 SQLmap用户手册:文档介绍 - sqlmap 用户手册 由于这题是post请求,所以先使用burp进行抓包,然后将数据包存入txt文件中打包 用-r 选择目标txt文件 python sqlmap.py -r data.txt -current-db…

JavaScript之数据类型

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 数据类型   Java…

2023天津公租房网上登记流程图,注册到信息填写

2023年天津市公共租赁住房网上登记流程图 小编为大家整理了天津市公共租赁住房网上登记流程,从登记到填写信息。 想要体验的朋友请看一下。 申请天津公共租赁住房时拒绝申报家庭情况会怎样? 天津市住房保障家庭在享受住房保障期间,如在应申…

力扣 第 125 场双周赛 解题报告 | 珂学家 | 树形DP + 组合数学

前言 整体评价 T4感觉有简单的方法&#xff0c;无奈树形DP一条路上走到黑了&#xff0c;这场还是有难度的。 T1. 超过阈值的最少操作数 I 思路: 模拟 class Solution {public int minOperations(int[] nums, int k) {return (int)Arrays.stream(nums).filter(x -> x <…

Windows上构建一个和Linux类似的Terminal

preview 目的是在Windows上构建一个和Linux类似的Terminal&#xff0c;让Windows炼丹和Linux一样舒适&#xff0c;同是让Terminal取代Xshell完成远程链接。 预览如下图 在Linux下我们使用zsh和oh-my-zsh结合&#xff0c;Windows下我们使用powershell7和oh-my-posh结合。 前提…

力扣● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

● 1049. 最后一块石头的重量 II 题目要把石头分成两堆&#xff0c;这两堆的重量差值最小。相撞之后剩下的石头重量就最小。其实就是要尽量把石头分为差不多重量的两堆&#xff0c;和昨天的● 416. 分割等和子集相似&#xff0c;这样就转换成了01背包问题。 和416题一样&…

【字符串相加】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 字符串相加 方法一&#xff1a; 方法二&#xff1a; 总结 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升起的太阳&#xff0c;一种是正在努力学习编程的…

腾讯云幻兽帕鲁游戏存档迁移教程,本地单人房迁移/四人世界怎么迁移存档?

腾讯云幻兽帕鲁游戏存档迁移的方法主要包括以下几个步骤&#xff1a; 登录轻量云控制台&#xff1a;首先&#xff0c;需要登录到轻量云控制台&#xff0c;这是进行存档迁移的前提条件。在轻量云控制台中&#xff0c;可以找到接收存档的服务器卡片&#xff0c;并点击进入实例详情…

LeetCode 2368.受限条件下可到达节点的数目:搜索 + 哈希表

【LetMeFly】2368.受限条件下可到达节点的数目&#xff1a;搜索 哈希表 力扣题目链接&#xff1a;https://leetcode.cn/problems/reachable-nodes-with-restrictions/ 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。 给…

ecmascript 6+(2)

引用数据类型&#xff1a; Object, Array, RegExp, Date等 包装类型&#xff1a;&#xff08;底层数据类型会将简单数据类型包装为对象&#xff09; String, Number, Boolean等&#xff08;都是基本数据类型的构造函数&#xff09; Object Object.keys(对象) 返回数组&…

ctf_show笔记篇(web入门---php特性)

目录 php特性 89&#xff1a;直接数组绕过preg_match当遇到数组时会直接报错输出0 90&#xff1a;这里利用了intval的特性 91&#xff1a;这里需要细节一点 92-93&#xff1a;这两题的方法很多可以发散思维 94&#xff1a;还是利用小数绕过例如4476.0 95&#xff1a;这里…

spring boot 修复 Spring Framework URL解析不当漏洞(CVE-2024-22243)

漏洞描述 当应用程序使用UriComponentsBuilder来解析外部提供的URL&#xff08;如通过查询参数&#xff09;并对解析的URL的主机执行验证检查时可能容易受到Open重定向攻击和SSRF攻击&#xff0c;导致网络钓鱼和内部网络探测等。 受影响产品或系统 6.1.0 < Spring Framew…

【bioinformation 2】生物数据库

&#x1f31e;欢迎来到AI医学的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年3月3日&…

【新书推荐】11.1 子程序设计

第十一章 子程序及参数传递 本章先讲述子程序设计的方法&#xff0c;然后介绍在子程序调用中参数的四种传递方法。 11.1 子程序设计 在前面的示例和练习中&#xff0c;会发现程序中会有一些反复使用到的代码片段。我们将程序中反复出现的程序片段设计成子程序&#xff0c;这样…

DM数据库学习之路(十九)DM8数据库sysbench部署及压力测试

sysbench部署 安装依赖 yum -y install make automake libtool pkgconfig libaio-devel vim-common 上传sysbench源代码 sysbench_tool.tar 测试是否安装成功 $ /opt/sysbench/sysbench-master-dpi/src/lua $ ./sysbench --version sysbench 1.1.0 sysbench测试DM 测试…

【STK】手把手教你利用STK进行仿真-STK软件基础02 STK系统的软件界面01 STK的界面窗口组成

STK系统是Windows窗口类型的桌面应用软件,功能非常强大。在一个桌面应用软件中集成了仿真对象管理、仿真对象属性参数、设置、空间场景二三维可视化、场景显示控制欲操作、仿真结果报表定制与分析、对象数据管理、仿真过程控制、外部接口连接和系统集成编程等复杂的功能。 STK…

MyBatis源码分析之基础支持层解析器

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ &#x1f440;&#x1f440;&#x1f440; 个人博客&#xff1a;小奥的博客 &#x1f44d;&#x1f44d;&#x1f44d;&#xff1a;个人CSDN ⭐️⭐️⭐️&#xff1a;传送门 &#x1f379; 本人24应届生一枚&#xff0c;技术和水平有限&am…

录制用户操作实现自动化任务

先上视频&#xff01;&#xff01; 流程自动化工具-录制操作绘制流程 这个想法之前就有了&#xff0c;趁着周末时间给它撸出来。 实现思路 从之前的文章自动化桌面未来展望中已经验证了录制绘制流程图的可行性。基于DOM录制页面操作轨迹的思路监听页面点击、输入事件即可&…

蓝桥杯练习题——二分

1.借教室 思路 1.随着订单的增加&#xff0c;每天可用的教室越来越少&#xff0c;二分查找最后一个教室没有出现负数的订单编号 2.每个订单的操作是 [s, t] 全部减去 d #include<iostream> #include<cstring> using namespace std; const int N 1e6 10; int d[…