【Spring】Cookie与Session

news2024/11/28 14:37:39

💐个人主页:初晴~

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


一、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.coloradmin.cn/o/2227554.html

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

相关文章

论文略读:Can We Edit Factual Knowledge by In-Context Learning?

EMNLP 2023 第一个探索in-context learning在语言模型知识编辑方便的效果 传统的知识编辑方法通过在包含特定知识的文本上进行微调来改进 LLMs 随着模型规模的增加,这些基于梯度的方法会带来巨大的计算成本->论文提出了上下文知识编辑(IKE&#xff0…

WebGL 添加背景图

1. 纹理坐标(st坐标)简介 ST纹理坐标(也称为UV坐标)是一种二维坐标系统,用于在三维模型的表面上精确地定位二维纹理图像。这种坐标系统通常将纹理的左下角映射到(0,0),而右上角映射到(1,1)。 S坐标&#x…

基于Multisim的可编程放大电路设计与仿真

74LS279(RS触发器),结合开关,将输出接入74LS163实现的8位计数器的时钟端,每拨动两次开关K,将产生一个脉冲信号,计数器将加一,产生的结果为000,001,010,011,100,101,110,111&#xff…

面试经典 150 题.P26. 删除有序数组中的重复项(003)

本题来自:力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解: class Solution {public int removeDuplicates(int[] nums) …

并发编程(2)——线程管控

目录 二、day2 1. 线程管控 1.1 归属权转移 1.2 joining_thread 1.2.1 如何使用 joining_thread 1.3 std::jthread 1.3.1 零开销原则 1.3.2 线程停止 1.4 容器管理线程对象 1.4.1 使用容器 1.4.2 如何选择线程运行数量 1.5 线程id 二、day2 今天学习如何管理线程&a…

5个可替代Gamma的国产ppt软件推荐!职场办公不要太简单!

Gamma ppt是海外一款非常受欢迎的ai做ppt软件,这款软件上线的时间不长,却在短时间内收获了众多用户的好评和资本市场的青睐。 对国内用户而言,Gamma PPT在国内虽然可以使用,但是由于其站点架设在海外,访问时往往存在延…

2024年9月电子学会青少年软件编程Python等级考试(三级)真题试卷

2024年9月青少年软件编程Python等级考试(三级)真题试卷 选择题 第 1 题 单选题 以下python表达式的值为True的是?( ) A.all( ,1,2,3) B.any([]) C.bool(abc) D.divmod(6,0) 第 2 题 单选题 下列python代码的…

数据结构与算法-21算法专项(中文分词)(END)

中文分词 搜索引擎是如何理解我们的搜索语句的? mysql中使用 【like “%中国%”】,这样的使用方案 缺点1:mysql索引会失效缺点2:不能模糊,比如我搜湖南省 就搜不到湖南相关的 1 trie树 Trie树,又称前缀树…

【日志】力扣13.罗马数字转整数 || 解决泛型单例热加载失败问题

2024.10.28 【力扣刷题】 13. 罗马数字转整数 - 力扣(LeetCode)https://leetcode.cn/problems/roman-to-integer/description/?envTypestudy-plan-v2&envIdtop-interview-150这题用模拟的思想可以给相应的字母赋值,官方的答案用的是用一…

超好玩又简单-猜数字游戏(有手就行)

云边有个稻草人-CSDN博客 我的个人主页 目录 云边有个稻草人-CSDN博客 前言 猜数字游戏的游戏要求 1. 随机数的生成 1.1 rand 1.2 srand 1.3 time 1.4 设置随机数的范围 2. 猜数字游戏实现 2.1 游戏实现基本思路 2.2 代码实现 Relaxing Time! —————————…

微信小程序25__实现卡片变换

先看效果图 实现代码如下&#xff1a; <view class"page" style"filter:hue-rotate({{rotation}}deg)"><view class"prev" catchtap"toPrev">《《《</view><view class"next" catchtap"toNext&q…

git下载和配置

git是什么&#xff1f; Git是一种分布式版本控制系统&#xff0c;用于跟踪文件的变化&#xff0c;尤其是源代码。它允许多个开发者在同一项目上进行协作&#xff0c;同时保持代码的历史记录。Git的主要特点包括&#xff1a; 分布式&#xff1a;每个开发者都有项目的完整副本&a…

前端自学资料(笔记八股)分享—CSS(4)

更多详情&#xff1a;爱米的前端小笔记&#xff08;csdn~xitujuejin~zhiHu~Baidu~小红shu&#xff09;同步更新&#xff0c;等你来看&#xff01;都是利用下班时间整理的&#xff0c;整理不易&#xff0c;大家多多&#x1f44d;&#x1f49b;➕&#x1f914;哦&#xff01;你们…

无人机避障——4D毫米波雷达Octomap从点云建立三维栅格地图

Octomap安装 sudo apt-get install ros-melodic-octomap-ros sudo apt-get install ros-melodic-octomap-msgs sudo apt-get install ros-melodic-octomap-server sudo apt-get install ros-melodic-octomap-rviz-plugins # map_server安装 sudo apt-get install ros-melodic-…

SLAM|2. 差异与统一:坐标系变换与外参标定

本章主要内容 1.坐标系变换 2.相机外参标定 上一章我们了解了相机内参的概念&#xff0c;内参主要解决三维世界与二维图像之间的映射关系。有了内参我们可以一定程度上还原相机看到了什么&#xff08;但缺乏尺度&#xff09;。但相机看到的数据只是处于相机坐标系&#xff0c;为…

Solidworks二次开发 获取装配体里面组件列表以及名称

******************************************************************************从装配体里面获取组件******************************************************************************Option Explicit 强制在模块级别显式声明所有变量 *********************定义SOLIDWOR…

《链表篇》---环形链表II(返回节点)

题目传送门 方法一&#xff1a;哈希表&#xff08;与环形链表类似&#xff09; 很容易就可以找到链表的相交位置。 public class Solution {public ListNode detectCycle(ListNode head) {if(head null || head.next null){return null;}Set<ListNode> visited new Ha…

2024 年 MathorCup 数学应用挑战赛——大数据竞赛-赛道 A:台风的分类与预测

2024年MathorCup大数据挑战赛-赛道A初赛-第四版论文.ziphttps://download.csdn.net/download/qq_52590045/89930645 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ …

解决Github下载速度慢的问题

1. 方式一 先把hosts文件先复制一份到其他文件夹下&#xff0c;以免造成不小心改动出现的后果在C盘的C:\Windows\System32\drivers\etc 下的hosts文件 用编辑器打开后&#xff0c;在末尾处添加访问如下的两个网站所返回的两个IP https://github.com.ipaddress.com/ http://gi…

基于SSM大学生互动交流网站设计与实现

前言 随着社会的发展&#xff0c;系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;但各种信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得信息&#xff0c;因此&#xff0c;设计一种安全高效的大学生互动交流网站极为重要。 开发…