【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.mzph.cn/web/57203.shtml

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

相关文章

【大模型系列】Mini-InternVL(2024.10)

Paper:https://arxiv.org/pdf/2410.16261Github:https://github.com/OpenGVLab/InternVL/tree/main/internvl_chat/shell/mini_internvlAuthor:Zhangwei Gao et al. 上海人工智能实验室 文章目录 0 总结(省流版)1 模型结构1.1 InternViT-300M…

MySQL 数据库备份与恢复全攻略

MySQL 数据库备份与恢复全攻略 引言 在现代应用中,数据库是核心组件之一。无论是个人项目还是企业级应用,数据的安全性和完整性都至关重要。为了防止数据丢失、损坏或意外删除,定期备份数据库是必不可少的。本文将详细介绍 MySQL 数据库的备…

大语言模型数据流程源码解读(基于llama3模型)

文章目录 前言一、数据进入LlamaForCausalLM(LlamaPreTrainedModel)类二、数据进入LlamaModel(LlamaPreTrainedModel)类1、input_ids的embedding编码2、position_ids位置获取3、causal_mask因果mask构建1、causal_mask调用2、因果mask代码解读(_update_causal_mask)4、hidden_s…

Docker镜像的创建、修改与导出

Docker镜像的创建、修改与导出 前言一、创建Docker镜像1. 基于已有镜像创建方法一:修改现有镜像方法二:使用Dockerfile通过源码编译安装nginx二、修改Docker镜像1. 基于已有镜像创建新镜像方法一:修改现有镜像2. 使用`docker commit`命令创建新镜像方法一:提交正在运行的容…

Depcheck——专门用于检测 JavaScript 和 Node.js 项目中未使用依赖项的工具

文章目录 Depcheck 是什麽核心功能📚检测未使用的依赖🐛检测缺失的依赖✨支持多种文件类型🌍可扩展性 安装与使用1. 安装 Depcheck2. 使用 Depcheck Depcheck 的应用总结项目源码: Depcheck 是什麽 来看一个常见错误场景&#x1…

Sqoop的安装配置及使用

Sqoop安装前需要检查之前是否安装了Tez,否则会产生版本或依赖冲突,我们需要移除tez-site.xml,并将hadoop中的mapred-site.xml配置文件中的mapreduce驱动改回成yarn,然后分发到其他节点,hive里面配置的tez也要移除,然后…

sqoop抽取数据报驱动包不存在的问题

sqoop抽取数据报驱动包不存在的问题 报错示例:需要把相应的jar包放到sqoop的lib目录下: 可以正常查询

SpringBoot后端开发常用工具详细介绍——flyway数据库版本控制工具

文章目录 什么是flyway简介为什么要使用flyway 流程介绍整合springboot添加pom文件配置flyway向resource/db/migration添加sql文件 注意事项1. 迁移报错2. 迁移顺序 参考 什么是flyway 简介 为什么要使用flyway 我们在开发时往往会有这样一种情况: 进行软件开发…

HCIP-HarmonyOS Application Developer V1.0 笔记(一)

HarmonyOS的系统特性 硬件互助,资源共享;一次开发,多端部署;统一OS,弹性部署。 分布式软总线:分布式任务调度、分布式数据管理、分布式硬件虚拟化的基座 18N的独立设备 1个手机,8种设备(车机&#xff0c…

深入解析HTTP与HTTPS的区别及实现原理

文章目录 引言HTTP协议基础HTTP响应 HTTPS协议SSL/TLS协议 总结参考资料 引言 HTTP(HyperText Transfer Protocol)超文本传输协议是用于从Web服务器传输超文本到本地浏览器的主要协议。随着网络安全意识的提高,HTTPS(HTTP Secure…

Docker搭建基于Nextcloud的个人云盘/私有云盘/个人相册/家庭NAS

安装配置Docker 官方安装文档:https://docs.docker.com/engine/install/ Docker常用命令:https://blog.csdn.net/qq_43003203/article/details/139532097?spm1001.2014.3001.5502 Docker镜像仓库配置方法和国内常用镜像仓库地址: 输入&a…

杂项笔记

这个好像如果如果分配空间就会执行 这个扩容好像会进行拷贝 4 没懂 X x 0; X x1 {0,0}; 都会调用X::X(int x1, int x2 0)

腾讯通低成本替代方案:支持银河麒麟及统信等国产系统和移动端

一、腾讯通继续使用的核心痛点 自腾讯通停更及官网下架后,用户获取更新、技术支持和资源下载的渠道被切断,面临以下无法解决的关键问题: ● 在国产系统及移动端无法使用:腾讯通仅兼容Windows与MAC系统,致使用户在国产…

vue路由的基本使用

vue路由的基本使用 vue-router简介一、路由配置和使用1、安装2、创建路由实例2、在组件中引用路由 router-view ,如APP根组件中直接引用:3、最后还需要把路由挂载到APP实例中,在main.js中注册路由: 二、路由重定向与别名三、声明式导航1、传统…

大模型低资源部署策略

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

基于Springboot+微信小程序的“学课助手”小程序 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 该系统…

如何将原本打开Edge呈现出的360浏览器,更换成原本的Edge页面或者百度等其他页面

每次打开Edge浏览器,都会呈现出360浏览器的页面,很烦。以下将说明如果将呈现出的360浏览器,更换成原本的Edge页面或者百度等其他页面。 1.找到你的控制面板,点击卸载程序。 2. 找到360安全卫士,右键单击更改/卸载。 3…

云原生笔记

#1024程序员节|征文# 单页应用(Single-Page Application,SPA) 云原生基础 云原生全景内容宽泛,以至于刚开始就极具挑战性。 云原生应用是高度分布式系统,它们存在于云中,并且能够对变化保持韧性。系统是由多个服务组成的&#…

Android 下载进度条HorizontalProgressView 基础版

一个最基础的自定义View 水平横向进度条,只有圆角、下载进度控制;可二次定制度高; 核心代码: Overrideprotected void onDraw(NonNull Canvas canvas) {super.onDraw(canvas);int mW getMeasuredWidth();int mH getMeasuredHei…

WebGL进阶(五)-可视域

理论基础: 顶点着色器 Vertex Shader 主要是负责处理顶点位置、顶点颜色、顶点向量等顶点的数据;处理一些顶点的变换:例如在进行视图变换和投影变换时MVP矩阵会改变顶点的位置信息。 输入: 顶点着色器输入部分主要是声明&…