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被浏览器记录下来的样式。
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.mzph.cn/news/718745.shtml

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

相关文章

Transformer模型分布式并行通信量浅析

1.数据并行DP(朴素数据并行,Zero数据并行之后补充) O ( h 2 ∗ l ) O(h^2*l) O(h2∗l) 每台机器做完自己的梯度后需要做一次All reduce操作来累积梯度,故一个batch计算发送的数据量为每层梯度大小 h 2 h^2 h2乘以层数 l l l 优点…

【李沐论文精读】Resnet精读

论文地址:Deep Residual Learning for Image Recognition 参考:撑起计算机视觉半边天的ResNet【论文精读】、ResNet论文逐段精读【论文精读】、【李沐论文精读系列】 一、导论 深度神经网络的优点:可以加很多层把网络变得特别深,…

力扣周赛387

第一题 代码 package Competition.The387Competitioin;public class Demo1 {public static void main(String[] args) {}public int[] resultArray(int[] nums) {int ans[]new int[nums.length];int arr1[]new int[nums.length];int arr2[]new int[nums.length];if(nums.leng…

Linux系统Docker部署RStudio Server

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE,并通过 Web 浏览器进行访问…

第二十四章 :Docker 部署 SpringBoot

第二十四章 :Docker SpringBoot 配置文件容器外加载部署 Docker version 25.0.3, build 4debf41 ,Docker Compose version v2.24.2容器运行后,若需修改配置文件,只需修改宿主机的application-prod.yml ,重启容器即可。 Springboot 2.x 版本 部署规划 服务器IP192.168.92…

4. 编写app组件

1. 代码 main.ts // 引入createApp用于创建应用 import {createApp} from "vue"// 引入App根组件 import App from ./App.vue createApp(App).mount(#app) App.vue <!-- vue文件可以写三种标签1. template标签&#xff0c;写html结构2. script 脚本标签&…

判断docker 镜像启动成功 shell脚本

要编写一个Shell脚本来判断Docker镜像是否启动成功&#xff0c;你可以使用docker ps命令来检查容器是否在运行状态。以下是一个简单的Shell脚本示例&#xff0c;用于判断Docker镜像是否成功启动&#xff1a; #!/bin/bash# 指定要检查的容器名称或ID CONTAINER_NAME"your_c…

风险评估是什么意思?与等保测评有什么区别?

最近看到不少小伙伴在问&#xff0c;风险评估是什么意思&#xff1f;与等保测评有什么区别&#xff1f;这里我们就来简单聊聊。 风险评估是什么意思&#xff1f; 风险评估是指对某个特定领域或项目进行全面分析和评估&#xff0c;以确定可能存在的潜在风险和危害&#xff0c;并…

2023全球软件开发大会-上海站:探索技术前沿,共筑未来软件生态(附大会核心PPT下载)

随着信息技术的迅猛发展&#xff0c;全球软件开发大会&#xff08;QCon&#xff09;已成为软件行业最具影响力的年度盛会之一。2023年&#xff0c;QCon再次来到上海&#xff0c;汇聚了众多业界精英、技术领袖和开发者&#xff0c;共同探讨软件开发的最新趋势和实践。 一、大会…

服务器感染了.ma1x0勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 网络安全成为至关重要的议题。.ma1x0勒索病毒是当前网络威胁中的一种恶意软件&#xff0c;它的出现给用户带来了极大的困扰。然而&#xff0c;正如任何挑战一样&#xff0c;我们也有方法来面对并克服.ma1x0勒索病毒。本文将全面介绍这种病毒的特点&#xff0…

MB85RC铁电 FRAM驱动(全志平台linux)

测试几天发现一个bug&#xff0c;就是无法一次读取32个字节的数据&#xff0c;1-31,33,128,512都试过了&#xff0c;唯独无法读取32个字节&#xff0c;驱动未报错&#xff0c;但是读取的都是0&#xff0c;找不到原因&#xff0c;估计应该是全志iic驱动的问题&#xff0c;暂时没…

leetcode - 2095. Delete the Middle Node of a Linked List

Description You are given the head of a linked list. Delete the middle node, and return the head of the modified linked list. The middle node of a linked list of size n is the ⌊n / 2⌋th node from the start using 0-based indexing, where ⌊x⌋ denotes th…

python中的类与对象(3)

目录 一. 类的多继承 二. 类的封装 三. 类的多态 四. 类与对象综合练习&#xff1a;校园管理系统 一. 类的多继承 在&#xff08;2&#xff09;第四节中我们介绍了什么是类的继承&#xff0c;在子类的括号里面写入要继承的父类名。上一节我们只在括号内写了一个父类名&…

新手淘宝开店如何引流

对于新手淘宝卖家来说&#xff0c;引流是开店过程中最为关键的一环。如何吸引潜在客户进入店铺&#xff0c;提高商品的曝光率和销量&#xff0c;是每个新手卖家都面临的挑战。本文将为你提供新手淘宝开店的引流攻略&#xff0c;帮助你从零开始掌握实用的引流技巧。 一、优化店…

C++的类型转换

1.C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与接收返回值类型不一致时&#xff0c;就需要发生类型转化&#xff0c;C语言中总共有两种形式的类型转换&#xff1a;隐式类型转换和…

【机器人最短路径规划问题(栅格地图)】基于模拟退火算法求解

代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 基于模拟退火算法求解机器人最短路径规划问题&#xff08;栅格地图&#xff09;的仿真结果 仿真结果&#xff1a; 初始解的路径规划图 收敛曲线&#xff1a; 模拟退火算法求解的路径规划图 结论&#xff…

Ubuntu20安装zabbix-agent2,对接zabbix 6.4

在Ubuntu 20.04 LTS上安装Zabbix Agent 2并与Zabbix Server 6.4对接&#xff0c;请按照以下步骤操作&#xff1a; 更新系统&#xff1a; sudo apt update sudo apt upgrade 添加Zabbix官方仓库&#xff1a; 首先&#xff0c;需要将Zabbix的官方存储库添加到你的系统中以获取Za…

C#面:常用的 异常类 有哪些

异常类是用于处理程序运行时出现的错误或异常情况的类。 C# 提供了一些内置的异常类&#xff0c;常用的包括&#xff1a; System.Exception&#xff1a;所有异常类的基类&#xff0c;可以用于捕获所有类型的异常。System.SystemException&#xff1a;表示系统级别的异常&…

【了解SpringCloud Gateway微服务网关】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱什么是SpringCloudGateway功能特征应用场景核心概念配置文件工作原理路由谓词工厂&#xff08;内置的&#xff09;[After 路由谓词工厂](https://docs.spring.io/spring-cloud-gateway/docs/current/refere…

Mysql运维篇(七) 部署MHA--完结

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 一、MHA软件构成 Manager工具包主要包括以下几个工具&#xff1a; masterha_manger 启…