【Spring】获取 Cookie和Session

回顾 Cookie

HTTP 协议自身是属于“无状态”协议

  • 无状态:默认情况下,HTTP 协议的客户端和服务器之间的这次通信和下次通信之间没有直接的联系

但是在实际开发中,我们很多时候是需要知道请求之间的关联关系的

  • 例如登录网站成功后,第二次访问的时候服务器就能知道该请求是否是已经登录过了

image.png
上述图片中的“令牌”通常就存储在 Cookie 字段中

比如去医院挂号:

  • 看病之前先挂号,挂号时需要提供身份证号,同时得到一张“就诊卡”,这个就诊卡就相当于患者的“令牌”
  • 后续去各个科室进行检查、诊断、开药等操作,都不必再出示身份证了,只要凭“就诊卡”就可以识别出当前患者的身份
  • 看完病之后,不想要就诊卡了,就可以注销这个卡。此时患者的身份和就诊卡的关联关系就被销毁了(类似于网站的注销功能)
  • 又来看病,可以办一张新的就诊卡,此时就得到了一个新的“令牌”

此时在服务器这边就需要记录“令牌”的信息,以及令牌对应的用户信息,这个就是 Session 机制所做的工作


理解 Session

会话就是对话的意思image.png|525
在计算机领域,会话是一个客户与服务器之间的不中断的请求响应。对客户的每个请求,服务器能够识别出请求来自于同一个客户。当一个未知的客户向 Web 应用程序发送第一个请求时就开始了一个会话。当客户明确结束会话或服务器在一个时限内没有收到客户的任何请求时,会话就结束了

比如我们打客服电话

  • 每次打客服电话,都是一个会话,挂断电话,会话就结束了
  • 下次再打客服电话,就又是一个新的会话
  • 如果我们长时间不说话,没有新的请求,会话也会结束

服务器同一时刻收到的请求时很多的。服务器需要清楚地区分每个请求时从属于哪个用户,也就是属于哪个会话,就需要在服务器这边记录每个会话以及与用户的信息的对应关系

Session 是服务器为了保存用户信息而创建的一个特殊的对象image.png|589


Session 的本质就是一个“哈希表”,存储了一些键值对结构。Key 就是 SessionValue 就是用户信息(用户信息可以根据需求灵活设计)image.png|570


image.png

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

tokenSessionId 是相似的,但是不一样。token 是身份的证明,SessionId 是其中一种实现方式


image.png

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

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


Cookie 和 Session 的区别

  • Cookie 是客户端保存用户信息的一种机制。Session 是服务器端保存用户信息的一种机制
  • CookieSession 之间主要是通过 SessionId 关联起来的,SessionIdCookieSession 之间的桥梁
  • CookieSession 经常会在一起配合使用,但不是必须配合
    • 完全可以用 Cookie 来保存一些数据在客户端。这些数据不一定是用户身份信息,也不一定是 SessionId
    • Session 中的 SessionId 也不需要非得通过 Cookie / Set-Cookie 来传递,比如通过 URL 来传递

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux高效查日志命令介绍

说明:之前介绍Linux补充命令时,有介绍使用tail、grep命令查日志; Linux命令补充 今天发现仅凭这两条命令不够,本文扩展介绍一下。 命令一:查看日志开头 head -n 行数 日志路径如下,可以查看程序启动是否…

安装和配置k8s可视化UI界面dashboard-1.20.6

安装和配置k8s可视化UI界面dashboard-1.20.6 1.环境规划2.初始化服务器1)配置主机名2)设置IP为静态IP3)关闭selinux4)配置主机hosts文件5)配置服务器之间免密登录6)关闭交换分区swap,提升性能7&…

系统架构设计师考试背记精要

1、架构的本质: (1)软件架构为软件系统提供了一个结构、行为和属性的高级抽象。(2)软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束。 2、数据流风格:适合于分阶段做数据处…

Springboot从入门到起飞-【day01】

个人主页→VON 收录专栏→Springboot从入门到起飞 一、前言 经过了近两个月的沉淀开始了新专栏的学习,经过深思熟虑还是决定重新学习java,因为基础部分东西太多太乱就不进行逐一的更新了,等到学完了一同进行更新。 二、Springboot简要概述 …

汽车免拆诊断案例 | 2013款宝马116i车偶尔加速不良

故障现象  一辆2013款宝马116i车,搭载N13B16A 发动机,累计行驶里程约为12.1万km。车主反映,该车行驶中偶尔加速无反应,且发动机故障灯异常点亮。 故障诊断 接车后试车,故障现象无法再现。用故障检测仪检测&#xff…

ChatGPT国内中文版镜像网站整理合集(2024/10/06)

一、GPT中文镜像站 ① yixiaai.com 支持GPT4、4o以及o1,支持MJ绘画 ② chat.lify.vip 支持通用全模型,支持文件读取、插件、绘画、AIPPT ③ AI Chat 支持GPT3.5/4,4o以及MJ绘画 1. 什么是镜像站 镜像站(Mirror Site&#xff…

A股知识答题pk小程序怎么做?

A股知识答题pk小程序怎么做?以下是制作A股知识答题PK小程序的一般步骤: 一、 需求分析与规划: 明确目标:确定小程序的主要目标,比如是为了帮助用户学习A股知识、进行趣味竞赛,还是作为金融教育工具等。 …

2024年【金属非金属矿山(露天矿山)安全管理人员】考试题库及金属非金属矿山(露天矿山)安全管理人员实操考试视频

题库来源:安全生产模拟考试一点通公众号小程序 2024年金属非金属矿山(露天矿山)安全管理人员考试题库为正在备考金属非金属矿山(露天矿山)安全管理人员操作证的学员准备的理论考试专题,每个月更新的金属非…

基于IDEA+SpringBoot+Vue+Uniapp的投票评选小程序系统的详细设计和实现

2. 详细视频演示 文章底部名片,联系我获取更详细的演示视频 3. 论文参考 4. 项目运行截图 代码运行效果图 代码运行效果图 代码运行效果图 代码运行效果图 代码运行效果图 5. 技术框架 5.1 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框…

Spring Cloud Stream 3.x+kafka 3.8整合

Spring Cloud Stream 3.xkafka 3.8整合,文末有完整项目链接 前言一、如何看官方文档(有深入了解需求的人)二、kafka的安装tar包安装docker安装 三、代码中集成创建一个测试topic:testproducer代码producer配置(配置的格式,上篇文章…

【机器学习】逻辑回归|分类问题评估|混淆矩阵|ROC曲线|AUC指标 介绍及案例代码实现

文章目录 逻辑回归逻辑回归简介逻辑回归的数学基础逻辑回归原理概念损失函数 逻辑回归API函数和案例案例癌症分类预测 分类问题评估混淆矩阵分类评估方法 - 精确率 召回率 F1ROC曲线 AUC指标案例AUC 计算的API分类评估报告api 电信客户流失预测案例 逻辑回归 逻辑回归简介 ​…

matlab不小心删除怎么撤回

预设项——>删除文件——>移动至临时文件夹 tem临时文件夹下

SwiftUI 6.0(iOS 18)新增的网格渐变色 MeshGradient 解惑

概述 在 SwiftUI 中,我们可以借助渐变色(Gradient)来实现更加灵动多彩的着色效果。从 SwiftUI 6.0 开始,苹果增加了全新的网格渐变色让我们对其有了更自由的定制度。 因为 gif 格式图片自身的显示能力有限,所以上面的…

【自动驾驶汽车通讯协议】GMSL通信技术以及加串器(Serializer)解串器(Deserializer)介绍

文章目录 0. 前言1. GMSL技术概述2. 为什么需要SerDes?3. GMSL技术特点4.自动驾驶汽车中的应用5. 结论 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准…

六西格玛黑带项目:TBX-02无人机飞行稳定性提升——张驰咨询

一、项目背景与问题定义 TBX-02是该公司最新发布的消费级无人机,面向摄影爱好者和户外探险者。产品上市后,通过客户反馈和实际测试数据发现,该无人机在复杂飞行环境中,如强风或快速移动时,存在明显的飞行抖动和稳定性…

RabbitMQ初识

目录 Kafka RocketMQ RabbitMQ MQ界面(它使用的端口号5672,界面是15672) 如何添加一个虚拟机,点击右侧 Topics(通配符模式) 发布确认机制 持久性(可靠性保证的机制之一) JDK17,Linux服务器Ubuntu 什么是MQ 实…

前端开发笔记--html 黑马程序员2

文章目录 前端常用标签一、标题标签二、段落标签和换行标签和水平线标签三、文本格式化标签![请添加图片描述](https://i-blog.csdnimg.cn/direct/87583fa23fe04229b016912051f3fc45.png)四、盒子标签五、图像标签六、连接标签七、注释和特殊字符 八、表格标签的基本使用九、列…

48 Redis

48 Redis 前言 Redis(Remote Dictionary Server ),即远程字典服务。是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 redis会周期性的把更新的数据写入磁盘或者把修改操…

数据结构-5.6.二叉树的先,中,后序遍历

一.遍历: 二.二叉树的遍历:利用了递归操作 1.简介: 二叉树的先序遍历,中序遍历,后序遍历都是以根结点遍历顺序为准的,如先序遍历就先遍历根结点 2.实例: 例一: 例二: …

HarmonyOS NEXT应用开发实战(二、封装比UniApp和小程序更简单好用的网络库)

网络访问接口,使用频次最高。之前习惯了uniapp下的网络接口风格,使用起来贼简单方便。转战到鸿蒙上后,原始网络接口写着真累啊!目标让鸿蒙上网络接口使用,简单程度比肩uniapp,比Axios更轻量级。源码量也不多…