基础网络详解4--HTTP CookieSession 思考 2

news2025/2/15 9:09:59

一、Cookie与Set-Cookie

1. Cookie

  • 定义: Cookie 是客户端(通常是浏览器)存储的一小段数据,由服务器通过 Set-Cookie 响应头设置,并在后续请求中通过 Cookie 请求头发送回服务器。
  • 作用: 用于在客户端保存状态信息,例如用户登录状态、偏好设置等。
  • 使用场景:
      客户端在每次请求时,自动将 Cookie 附加到请求头中,发送给服务器。
      服务器通过读取 Cookie 来识别用户或恢复会话状态。
  • 示例
GET /example HTTP/1.1
Host: www.example.com
Cookie: name=value; sessionid=12345

客户端将存储的 Cookie 发送给服务器

2、Set-Cookie

  • 定义: Set-Cookie 是服务器在 HTTP 响应中发送的响应头,用于在客户端设置或更新 Cookie。
  • 作用: 服务器通过 Set-Cookie 向客户端发送数据,要求客户端保存这些数据并在后续请求中回传。
  • 使用场景:
      服务器需要在客户端存储数据时(如用户登录成功后的会话 ID)。
      服务器可以设置 Cookie 的属性,如过期时间、作用域、安全性等。
  • 示例
HTTP/1.1 200 OK
Set-Cookie: sessionid=12345; Path=/; Expires=Wed, 09 Jun 2023 10:18:14 GMT; Secure; HttpOnly

服务器通过 Set-Cookie 设置一个名为 sessionid 的 Cookie,并指定了路径、过期时间、安全性和 HTTP-only 属性

3、主要区别

特性CookieSet-Cookie
类型请求头响应头
作用客户端将存储的 Cookie 发送给服务器服务器要求客户端设置或更新 Cookie
使用场景客户端发起请求时服务器返回响应时
数据流向客户端 → 服务器服务器 → 客户端
示例Cookie: name=value; sessionid=12345Set-Cookie: sessionid=12345; Path=/

4、Set-Cookie 的属性

Set-Cookie 可以设置多个属性来控制 Cookie 的行为:

  • Name=Value: Cookie 的名称和值。
  • Expires: Cookie 的过期时间(GMT 格式)。
       示例: Expires=Wed, 09 Jun 2023 10:18:14 GMT
  • Max-Age: Cookie 的最大存活时间(秒)。
       示例: Max-Age=3600(1 小时后过期)
  • Domain: Cookie 的作用域(指定域名)。
      示例: Domain=example.com
  • Path: Cookie 的作用路径。
      示例: Path=/(根路径下有效)
  • Secure: 仅在使用 HTTPS 时发送 Cookie。
      示例: Secure
  • HttpOnly: 禁止 JavaScript 访问 Cookie,防止 XSS 攻击。
      示例: HttpOnly
  • SameSite: 控制 Cookie 是否在跨站请求时发送。
      示例: SameSite=Strict(严格模式,禁止跨站发送)

5、工作流程

在客户端(如浏览器)第一次向服务器发送请求时,客户端是没有 Cookie 的。Cookie 的生成和传递过程是一个逐步建立的过程,以下是详细的解释:

  • 1.、第一次请求(无 Cookie)
    当客户端第一次访问某个网站时,浏览器会向服务器发送一个 HTTP 请求。由于是第一次访问,客户端还没有存储任何与该网站相关的 Cookie,因此请求头中不会包含 Cookie 字段。

示例

GET /index.html HTTP/1.1
Host: www.example.com
  • 2、服务器响应并设置 Cookie
    服务器接收到请求后,会根据业务逻辑决定是否需要设置 Cookie(例如,生成一个会话 ID 或其他标识)。服务器通过 Set-Cookie 响应头将 Cookie 发送给客户端。

示例

HTTP/1.1 200 OK
Set-Cookie: sessionid=12345; Path=/; HttpOnly
  • 3、客户端存储 Cookie
    客户端(浏览器)接收到服务器的响应后,会解析 Set-Cookie 头,并将 Cookie 存储在本地。
    存储的 Cookie 通常包括以下信息:
       Cookie 的名称和值(如 sessionid=12345)。
       作用域(如 Domain 和 Path)。
       过期时间(如 Expires 或 Max-Age)。
       其他属性(如 Secure、HttpOnly、SameSite)。
  • 4、后续请求(携带 Cookie)
    在客户端存储了 Cookie 后,后续对同一服务器的请求会自动将 Cookie 附加到请求头中。

示例

GET /dashboard HTTP/1.1
Host: www.example.com
Cookie: sessionid=12345

6、 Cookie 的初始来源

  • 第一次请求时没有 Cookie:客户端第一次访问服务器时,请求头中没有 Cookie 字段。
  • Cookie 是由服务器生成的:服务器通过 Set-Cookie 响应头将 Cookie 发送给客户端。
  • 客户端存储并回传 Cookie:客户端在后续请求中自动将存储的 Cookie 发送给服务器。

7、实际应用场景

  • 会话管理:
      服务器在用户登录成功后生成一个会话 ID,并通过 Set-Cookie 发送给客户端。
      客户端在后续请求中携带该会话 ID,服务器通过验证会话 ID 来识别用户。
  • 个性化设置:
      服务器可以通过 Cookie 存储用户的偏好设置(如语言、主题等)。
  • 跟踪用户行为:
      服务器可以通过 Cookie 记录用户的访问行为,用于分析或广告投放。

二、seesion详解

1、 基本概念

  • Cookie:
    是客户端(通常是浏览器)存储的一小段数据。
    由服务器通过 Set-Cookie 响应头发送给客户端。
    客户端在后续请求中自动将 Cookie 附加到请求头中发送给服务器。
    数据存储在客户端。
  • Session:
    是服务器端存储的用户状态信息。
    服务器为每个用户创建一个唯一的会话 ID,并将该 ID 通过 Cookie 或 URL 重写的方式发送给客户端。
    客户端在后续请求中发送会话 ID,服务器根据该 ID 查找对应的会话数据。
    数据存储在服务器端。

2、存储位置

  • Cookie:
    数据存储在客户端(浏览器)中。
    可以是内存 Cookie(浏览器关闭后失效)或持久化 Cookie(根据过期时间存储在硬盘中)。
  • Session:
    数据存储在服务器端(如内存、数据库或文件系统)。
    客户端只存储会话 ID(通常通过 Cookie 存储)。

3、数据安全性

  • Cookie:
    数据存储在客户端,可能被篡改或窃取。
    可以通过设置 Secure(仅 HTTPS 传输)、HttpOnly(禁止 JavaScript 访问)等属性提高安全性。
  • Session:
    数据存储在服务器端,客户端只存储会话 ID,相对更安全。
    会话 ID 仍需通过 Cookie 或 URL 传递,可能被窃取(如通过 XSS 攻击)。

4、数据大小限制

  • Cookie:
    单个 Cookie 大小通常限制为 4KB。
    每个域名下的 Cookie 数量和总大小也有限制(通常为 50 个 Cookie,总大小不超过 4KB)。
  • Session:
    数据存储在服务器端,没有严格的大小限制。
    但存储过多数据可能影响服务器性能。

5、生命周期

  • Cookie:
    可以设置过期时间(Expires 或 Max-Age),可以是会话级(浏览器关闭后失效)或持久化(长期有效)。
    客户端可以手动清除 Cookie。
  • Session:
    生命周期由服务器控制,通常在一定时间内无活动后失效(如 30 分钟)。
    服务器可以主动销毁 Session。

6、使用场景

  • Cookie:
    适合存储少量不敏感的数据,如用户偏好设置、跟踪信息等。
    适合跨页面或跨会话的状态管理。
  • Session:
    适合存储敏感数据,如用户登录状态、购物车信息等。
    适合短期状态管理(如一次会话期间)。

7、实现方式

  • Cookie:
    服务器通过 Set-Cookie 响应头设置 Cookie。
    客户端自动管理 Cookie 的存储和发送。
  • Session:
    服务器创建会话并生成唯一的会话 ID。
    会话 ID 通过 Cookie 或 URL 重写发送给客户端。
    客户端在后续请求中发送会话 ID,服务器根据 ID 查找对应的会话数据。

8、 性能影响

  • Cookie:
    每次请求都会携带 Cookie,可能增加请求头的大小。
    数据存储在客户端,对服务器性能无直接影响。
  • Session:
    数据存储在服务器端,可能占用服务器内存或存储资源。
    需要根据会话 ID 查找数据,可能增加服务器负载。

9、示例对比

  • Cookie 示例

1、服务器设置 Cookie:

HTTP/1.1 200 OK
Set-Cookie: username=john; Path=/; Expires=Wed, 09 Jun 2023 10:18:14 GMT

2、客户端发送 Cookie:

GET /dashboard HTTP/1.1
Host: www.example.com
Cookie: username=john
  • Session 示例

1、服务器创建 Session 并发送会话 ID:

HTTP/1.1 200 OK
Set-Cookie: sessionid=12345; Path=/; HttpOnly

2、客户端发送会话 ID:

GET /dashboard HTTP/1.1
Host: www.example.com
Cookie: sessionid=12345

服务器根据会话 ID 查找 Session 数据:
会话数据:{ sessionid: 12345, username: “john”, loggedIn: true }

10、总结对比表

特性CookieSession
存储位置客户端服务器端
数据安全性较低(数据存储在客户端)较高(数据存储在服务器端)
数据大小限制有(通常 4KB)无严格限制
生命周期可设置过期时间由服务器控制
使用场景存储少量不敏感数据存储敏感数据
实现方式通过 Set-Cookie 设置通过会话 ID 管理
性能影响增加请求头大小占用服务器资源

11.、如何选择?

  • 如果需要存储少量不敏感的数据,并且希望数据在客户端长期保存,使用 Cookie。
  • 如果需要存储敏感数据或大量数据,并且希望数据在服务器端管理,使用 Session。

在实际开发中,Cookie 和 Session 通常会结合使用。例如,使用 Cookie 存储会话 ID,而将实际数据存储在 Session 中。
理论上,只用 Cookie 是可以实现状态管理的,但在实际应用中,Session 的引入是为了解决 Cookie 的一些局限性,尤其是在安全性、数据存储和性能方面。

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

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

相关文章

【技术产品】DS三剑客:DeepSeek、DataSophon、DolphineSchduler浅析

引言 在大数据与云原生技术快速发展的时代,开源技术成为推动行业进步的重要力量。本文将深入探讨三个备受瞩目的开源产品组件:DeepSeek、DataSophon 和 DolphinScheduler,分别从产品定义、功能、技术架构、应用场景、优劣势及社区活跃度等方面…

云计算实训室解决方案(2025年最新版)

一、中高职及本科院校在云计算专业建设中面临的挑战 随着大数据、信息安全、人工智能等新兴信息技术产业的快速发展,相关领域人才需求激增,许多本科及职业院校纷纷开设云计算及相关专业方向。 然而,大多数院校在专业建设过程中面临以下困难&…

我的新书《青少年Python趣学编程(微课视频版)》出版了!

🎉 激动人心的时刻来临啦! 🎉 小伙伴们久等了,我的第一本新书 《青少年Python趣学编程(微课视频版)》 正式出版啦! 📚✨ 在这个AI时代,市面上的Python书籍常常过于枯燥&…

网络安全要学python 、爬虫吗

网络安全其实并不复杂,只是比普通开发岗位要学习的内容多一点。无论是有过编程基础还是零基础的都可以学习的。网络安全目前可就业的岗位从技术上可分为两部分:web安全和二进制逆向安全。web安全是网络安全的入门方向,内容简单,就…

DBSCAN 基于密度的空间带噪聚类法

DBSCAN 基于密度的空间带噪聚类法 DBSCAN(Density - Based Spatial Clustering of Applications with Noise)即基于密度的空间聚类算法,它是一种典型的密度聚类算法,以下从核心概念、算法步骤、优缺点及应用场景等方面进行解释。…

Python基于Django的漏洞扫描系统【附源码、文档说明】

博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

或非门组成的SR锁存器真值表相关问题

PS:主要是给大家抛砖引玉,不喜勿喷。 问题描述:或非门组成的SR锁存器,为什么当SD和RD等于0时候的真值表一个是Q0,Q0.一个结果是Q1,Q1?

深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决

在深度学习框架中,TensorFlow 和 PyTorch 无疑是两大明星框架。前面两篇文章我们分别介绍了 TensorFlow(点击查看) 和 PyTorch(点击查看)。它们引领着 AI 开发的潮流,吸引着无数开发者投身其中。但这两大框…

【前端框架】Vue3 面试题深度解析

本文详细讲解了VUE3相关的面试题,从基础到进阶到高级,分别都有涉及,希望对你有所帮助! 基础题目 1. 简述 Vue3 与 Vue2 相比有哪些主要变化? 答案: 响应式系统:Vue2 使用 Object.definePrope…

GRN前沿:DGCGRN:基于有向图卷积网络的基因调控网络推理

1.论文原名:Inference of gene regulatory networks based on directed graph convolutional networks 2.发表日期:2024 DGCGRN框架 中心节点和节点的构建 局部增强策略 1. 问题背景 在基因调控网络中,许多节点的连接度较低(即…

unity删除了安卓打包平台,unityhub 还显示已经安装,怎么解决

解决问题地址 可能由于版本问题文章中这个我没搜到,应该搜Android Build Supprot

C++ Primer 参数传递

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

数据结构 day06

数据结构 day06 6. 双向链表6.3. 双向循环链表 7. 树 tree7.1. 特点7.1.1. 什么是树7.1.2. 树的特性7.1.3. 关于树的一些术语 7.2. 二叉树7.2.1. 什么是二叉树7.2.2. 二叉树的性质7.2.3. 满二叉树和完全二叉树的区别7.2.4. 二叉树的遍历(画图)7.2.5. 二叉…

AI编程01-生成前/后端接口对表-豆包(或Deepseek+WPS的AI

前言: 做过全栈的工程师知道,如果一个APP的项目分别是前端/后端两个团队开发的话,那么原型设计之后,通过接口文档进行开发对接是非常必要的。 传统的方法是,大家一起定义一个接口文档,然后,前端和后端的工程师进行为何,现在AI的时代,是不是通过AI能协助呢,显然可以…

01什么是DevOps

在日常开发中,运维人员主要负责跟生产环境打交道,开发和测试,不去操作生产环境的内容,生产环境由运维人员操作,这里面包含了环境的搭建、系统监控、故障的转移,还有软件的维护等内容。 当一个项目开发完毕&…

力扣100. 相同的树(利用分解思想解决)

Problem: 100. 相同的树 文章目录 题目描述思路Code 题目描述 思路 题目要求判断两个二叉树是否完全相同,而此要求可以利用问题分解的思想解决,即判断当前节点的左右子树是否完全相同,而在二叉树问题分解的一般题目中均会带有返回值&#xff…

el-select 设置宽度 没效果

想实现下面的效果,一行两个,充满el-col12 然后设置了 width100%,当时一直没有效果 解决原因: el-form 添加了 inline 所以删除inline属性 即可

chrome://version/

浏览器输入: chrome://version/ Google浏览器版本号以及安装路径 Google Chrome131.0.6778.205 (正式版本) (64 位) (cohort: Stable) 修订版本81b36b9535e3e3b610a52df3da48cd81362ec860-refs/branch-heads/6778_155{#8}操作系统Windows…

反向代理块sjbe

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说,反向代理就相当于…

封装一个sqlite3动态库

作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、项目案例 二…