【Spring】Cookie与Session

💐个人主页:初晴~

📚相关专栏:计算机网络那些事


一、Cookie是什么?

Cookie的存在主要是为了解决HTTP协议的无状态性问题,即协议本身无法记住用户之前的操作。

  • "⽆状态" 的含义指的是:
默认情况下 HTTP 协议的客⼾端和服务器之间的这次通信,和下次通信之间没有直接的联系
但是实际开发中,我们很多时候是需要知道请求之间的关联关系的
例如登陆⽹站成功后, 第⼆次访问的时候服务器就能知道该请求是否是已经登陆过了

上述图中的 "令牌" 通常就存储在 Cookie 字段中。
⽐如去医院挂号
1. 看病之前先挂号. 挂号时候需要提供⾝份证号, 同时得到了⼀张 "就诊卡", 这个就诊卡就相当于患者的 "令牌".
2. 后续去各个科室进⾏检查, 诊断, 开药等操作, 都不必再出⽰⾝份证了, 只要凭就诊卡即可识别出当前患者的⾝份.
3. 看完病了之后, 不想要就诊卡了, 就可以注销这个卡. 此时患者的⾝份和就诊卡的关联就销毁了. (类似于⽹站的注销操作)
4. ⼜来看病, 可以办⼀张新的就诊卡, 此时就得到了⼀个新的 "令牌"
此时在服务器这边就需要记录"令牌"信息, 以及令牌对应的⽤⼾信息, 这个就是 Session 机制所做的⼯作

二、Session是什么?

Session(会话)是Web开发中用于管理用户状态的一种机制。它允许服务器在多个页面请求或多个浏览器会话之间保持用户的状态信息。

所谓的会话,其实就可以理解为 “对话”

在计算机领域,会话是⼀个客⼾与服务器之间的不中断的请求响应。对客⼾的每个请求,服务器能够识别出请求来⾃于同⼀个客⼾。当⼀个未知的客⼾向Web应⽤程序发送第⼀个请求时就开始了⼀个会话。当客⼾明确结束会话或服务器在⼀个时限内没有接受到客⼾的任何请求时,会话就结束了
⽐如我们打客服电话
每次打客服电话,是⼀个会话. 挂断电话,会话就结束了
下次再打客服电话,⼜是⼀个新的会话
如果我们⻓时间不说话,没有新的请求,会话也会结束
服务器同⼀时刻收到的请求是很多的。服务器需要清楚的区分每个请求是属于哪个⽤⼾,也就是属于哪个会话,就需要在服务器这边记录每个会话以及与⽤⼾的信息的对应关系。
  • Session是服务器为了保存⽤⼾信息⽽创建的⼀个特殊的对象

Session的本质就是⼀个 "哈希表", 存储了⼀些键值对结构. Key 就是SessionID, Value 就是⽤⼾信息(⽤⼾信息可以根据需求灵活设计)

SessionId 是由服务器⽣成的⼀个 "唯⼀性字符串",从 Session 机制的⻆度来看,这个唯⼀性字符串称为 " SessionId "。但是站在整个登录流程中看待,也可以把这个唯⼀性字符串称为 " token "。
上述例⼦中的令牌ID,就可以看做是SessionId,只不过令牌除了ID之外,还会带⼀些其他信息,⽐如时间、签名等

1. 当⽤⼾登陆的时候,服务器在 Session 中新增⼀个新记录,并把 sessionId返回给客⼾端 (通过 HTTP 响应中的 Set-Cookie 字段返回)
2. 客⼾端后续再给服务器发送请求的时候,需要在请求中带上 sessionId。(通过 HTTP 请求中的 Cookie 字段带上)
3. 服务器收到请求之后,根据请求中的 sessionId在 Session 信息中获取到对应的⽤⼾信息, 再进⾏后续操作。找不到则重新创建Session,并把SessionID返回

Session 默认是保存在内存中的。如果重启服务器则 Session 数据就会丢失

三、Cookie 与 Session 的区别

1、存储位置

  • Cookie:存储在客户端(用户的浏览器)中,通常以键值对的形式存在。
  • Session:存储在服务器端,客户端通常只存储一个Session ID,用于标识对应的服务器端Session。

2、存储大小和数量限制

  • Cookie:每个Cookie的大小一般限制在4KB左右,每个域名下可以存储的Cookie数量有限(大约20个)。
  • Session:理论上没有严格的大小限制,但受到服务器存储空间的限制。Session可以存储更多的数据。

3、生命周期

  • Cookie:可以设置过期时间,浏览器会在过期后删除Cookie,或者用户可以手动清除。
  • Session:依赖于服务器的配置,通常在用户关闭浏览器或Session超时后结束。

4、安全性

  • Cookie:由于存储在客户端,更容易受到跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等攻击,安全性较低。
  • Session:由于存储在服务器端,不易被篡改,相对更安全。但是,Session ID的传输需要安全保护,以防止Session劫持。

5、使用场景

  • Cookie:适用于存储不太敏感的数据,如用户偏好设置、会话标识符等。
  • Session:适用于存储敏感数据,如用户的登录状态、购物车内容等。

6、传输

  • Cookie:每次HTTP请求都会自动包含在请求头中发送给服务器,增加了HTTP请求的大小。
  • Session:只有Session ID在客户端和服务器之间传递,实际的Session数据存储在服务器端,减少了网络传输。

7、控制权

  • Cookie:由客户端浏览器控制,用户可以禁用Cookie或手动删除。
  • Session:由服务器控制,服务器可以创建、修改和删除Session。

8、跨域访问

  • Cookie:可以设置为跨域访问,允许多个相关联的域名访问相同的Cookie。
  • Session:通常局限于创建它的域名,除非通过特定的机制(如Session联邦)来实现跨域Session共享。
Cookie 和 Session之间主要是通过 SessionId 关联起来的,SessionId 是 Cookie 和 Session 之间的桥梁
注意:
Cookie 和 Session 经常会在⼀起配合使⽤,但是不是必须配合:
  • 完全可以⽤ Cookie 来保存⼀些数据在客⼾端。这些数据不⼀定是⽤⼾⾝份信息,也不⼀定是 SessionId
  • Session 中的sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递,⽐如通过URL传递

那么本篇文章就到此为止了,如果觉得这篇文章对你有帮助的话,可以点一下关注和点赞来支持作者哦。如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊

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

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

相关文章

c++习题36-奇数单增序列

目录 一,题目 二,思路 三,代码 一,题目 给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。 输入描述 第1行为 N; 第2行为 N 个正整…

java中Scanner的nextLine和next方法

思考&#xff0c;输入1 2 3 4 5加上enter&#xff0c;输出什么 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int[][] m new int[2][2];for (int i 0; i < 2; i) {for (int j 0; j < 2;…

Spring Boot技术中小企业设备管理系统设计与实践

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

重学SpringBoot3-怎样优雅停机

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-怎样优雅停机 1. 什么是优雅停机&#xff1f;2. Spring Boot 3 优雅停机的配置3. Tomcat 和 Reactor Netty 的优雅停机机制3.1 Tomcat 优雅停机3.2 Reac…

使用 Kafka 和 MinIO 实现人工智能数据工作流

MinIO Enterprise Object Store 是用于创建和执行复杂数据工作流的基础组件。此事件驱动功能的核心是使用 Kafka 的 MinIO 存储桶通知。MinIO Enterprise Object Store 为所有 HTTP 请求&#xff08;如 PUT、POST、COPY、DELETE、GET、HEAD 和 CompleteMultipartUpload&#xf…

fpga系列 HDL: 竞争和冒险 02

竞争和冒险 在 Verilog 设计中&#xff0c;竞争&#xff08;race conditions&#xff09;和冒险&#xff08;hazards&#xff09;是数字电路设计中不期望出现的现象&#xff0c;它们会影响电路的正确性。了解并解决竞争和冒险问题对于确保电路稳定运行非常重要。 竞争&#x…

尚硅谷-react教程-求和案例-数据共享(下篇)-完成数据共享-笔记

#1024程序员节&#xff5c;征文# public/index.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>redux</title></head><body><div id"root"></div></body> </html&…

MobileNetv2网络详解

背景&#xff1a; MobileNet v1中DW卷积在训练完之后部分卷积核会废掉&#xff0c;大部分参数为“0” MobileNet v2网络是由Google团队在2018年提出的&#xff0c;相比于MobileNet v1网络&#xff0c;准确率更高&#xff0c;模型更小 网络亮点&#xff1a; Inverted Residu…

力扣题86~90

题86&#xff08;中等&#xff09;&#xff1a; python代码 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def partition(self, head: Optional[Li…

(史上超级清晰带图解)红黑树的实现--C++

文章目录 一、红黑树的概念1、红黑树的规则&#xff1a;2、那红黑树如何确保最长路径不超过最短路径的2倍的&#xff1f;3、红黑树的效率&#xff1a; 二、红黑树的实现1、红黑树的结构2、红黑树的插入2.1、红黑树树插入一个值的大概过程2.2、情况1&#xff1a;变色2.3、情况2&…

大模型低资源部署策略

文章目录 解码效率分析大模型训练后量化方法经验性分析与相关结论由于大模型的参数量巨大,在解码阶段需要占用大量的显存资源,因而在实际应用中的部署代价非常高。在本文中,我们将介绍一种常用的模型压缩方法,即模型量化(ModelQuantization),来减少大模型的显存占用,从…

基于spootboot学生选课系统设计与实现

资料下载 https://download.csdn.net/download/qq_63753925/89888794 https://download.csdn.net/download/qq_63753925/89888793 https://download.csdn.net/download/qq_63753925/89885091 https://download.csdn.net/download/qq_63753925/89882320 摘 要 近年来&#xf…

25届电信保研经验贴(自动化所)

个人背景 学校&#xff1a;中九 专业&#xff1a;电子信息工程 加权&#xff1a;92.89 绩点&#xff1a;3.91/4.0 rank&#xff1a;前五学期rank2/95&#xff0c;综合排名rank1&#xff08;前六学期和综合排名出的晚&#xff0c;实际上只用到了前五学期&#xff09; 科研…

Gateway 统一网关

一、初识 Gateway 1. 为什么需要网关 我们所有的服务可以让任何请求访问&#xff0c;但有些业务不是对外公开的&#xff0c;这就需要用网关来统一替我们筛选请求&#xff0c;它就像是房间的一道门&#xff0c;想进入房间就必须经过门。而请求想要访问微服务&#xff0c;就必须…

STM32主从定时器输出个数、频率可调的脉冲

STM32中发出脉冲一般有两种方式&#xff1a; 1&#xff09;利用定时中断输出脉冲&#xff0c;但是间隔的延时会影响其他主程序的进程&#xff0c;当控制多个电机的时候就非常不可取&#xff1b; 2&#xff09;利用PWM脉宽调制&#xff0c;并通过主从定时器进行设定&#xff0…

微知-Lecroy力科的PCIe协议分析仪型号命名规则(PCIe代,金手指lanes数量)

文章目录 要点主要型号命名规则各代主要产品图片Summit M616 协议分析仪/训练器Summit T516 分析仪Summit T416 分析仪Summit T3-16分析仪Summit T28 分析仪 综述 要点 LeCroy(力科)成立于1964年&#xff0c;是一家专业生产示波器厂家。在美国纽约。一直把重点放在研制改善生产…

安卓14上蓝牙调用SystemProperties.set(),解决找不到SystemProperties.set()的问题

近期遇到一个需求&#xff0c;要在安卓14的蓝牙模块中调用SystemProperties.set()。 安卓14中的蓝牙&#xff0c;和安卓12的版本有较大的不同。它在packages/modules目录下&#xff0c;而安卓12是分散在packages/apps和frameworks/base等目录下&#xff1b;安卓14的蓝牙打包产…

Hash表算法

哈希表 理论知识&#xff08;本文来自于代码随想录摘抄&#xff09;什么是哈希常见的三种哈希结数组&#xff1a;set:map:其他常用方法或者技巧&#xff08;自己总结的&#xff09; 练习题和讲解有效的字母移位词349. 两个数组的交集1. 两数之和454. 四数相加 II15. 三数之和 总…

4款专业音频在线剪辑工具帮你开启创意之路。

音频在线剪辑工具能够为我们提供很大的便利&#xff0c;对于不管是专业的音乐制作人还是音频创作爱好者来说&#xff0c;都能借助一些音频编辑工具来充分发挥自己的创意。所以这一次&#xff0c;我要给大家介绍几个专业方便的音频剪辑工具。 1、福昕音频在线 直达链接&#x…

基于yolov8的布匹缺陷检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于yolov8的布匹缺陷检测系统&#xff0c;支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov8的布匹缺陷检测系统是在 PyTo…