Java:Session 会话详解

news2025/4/6 15:44:13

在介绍本篇的主角之前, 我们先复习一下 Cookie
为了实现在游览器的持久性存储和安全性考虑, 游览器提供了一个机制—— Cookie , Cookie 的储存空间很有限, 不同的游览器Cookie空间上限也不同, 一般总上限是 4k 个字节左右 (例如 Firefox), 其储存也只是按照域名进行分块存储, 其次, Cookie 是以键值对的形式进行存储, 而且还只能存储字符串, 复杂的对象都存不了, 这也是游览器出于对用户电脑进行保护的手段。

Session

Cookie 最常见的使用场景就是保存用户的信息, 接下来我们来分析一下「重复登录一个网站」涉及到的 Cookie 和 Session
如果是第一次登录网站, 那肯定是没有 Cookie 的, 登录成功后, 服务器会为这个用户分配一个 id

然后根据这个 id 为「键」, 用户信息为「值」, 这个「值」也可以是游览器想要存储的其他信息, 于是我们称这个键值对就是「会话 Session」, 这个「值」就是 「HttpSession」, 可能有点快, 没事慢慢看。
而服务器用于储存用户信息的「值」本质上又是键值对, 例如 key = “name” value = “张翰”…, 于是服务器就可以通过"name"为 key 来获取用户信息
而每一个网站不可能只有一个用户吧, 故而服务器就会为这些登录的用户储存一个个会话 Session
因此 会话是存储在服务器中的, 并且储存空间不受限

这个 id 实际上是服务器随机生成的一个字符串, 随后, 服务器会将这个 id 写入响应的 Set-Cookie 字段中
然后游览器收到这个响应后, 就会把响应 Set-Cookie 字段中的这个 id 保存下来, 如下图

在这里插入图片描述
然后接下来再次访问这个网络, 游览器的请求中的 Cookie 就会带有这个 id 字符串

在这里插入图片描述
于是服务器在处理这个请求的时候, 就会根据这个 id 在「服务器中的 类 哈希表」中查找「键」为这个 id 的会话 Session, 并且验证身份信息, 如果游览器发送的请求不带这个 id, 或者服务器的会话中没有「键」为该 id 的会话, 那就会被要求重新登录。可能稍微有点乱, 可以搭配以下图解食用
在这里插入图片描述

至此, 我们捋一下这些关系

假设一个网站对应一个 webapp, 而 webapp 必然储存着大量用户的会话 Session, 存储的结构是类哈希表结构, 一个会话的Key 值是 服务器分配的 id, 即 sessionId, 这个Key对应的值是这个用户的个人信息, 也是以键值对的形式组织的

在这里插入图片描述

总结一下

Session 是一种可以记录客户端状态的机制, 服务器生成一个 id 给游览器, 当然这个 id 是唯一的, 游览器访问服务器的时候随带将 id 一起发送, Session 就可以根据这个 id 验证用户状态, 记录或者修改相关信息, 并且 Session 是存储在服务器上的, 而 Cookie 储存在游览器中的

关于 Cookie 和 Session

除了上述内容之外, 再补充几点

  1. Session 具有更高的安全性, 相反 Cookie 安全性较低
  2. 如果过多地依赖 Session, 相同时间段访问网站的用户过多, 会增加服务器的负担
  3. 如若要进一步提升安全性, 还可以为 sessionId 增加点空间和时间限制, 例如一段时间过后必须重新登录, 或者设备在不同地方登录需要重新登录, 这在生活中其实用的很广泛, 如 qq 邮箱, gitee …

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

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

相关文章

在众多编程语言中,我为什么要学Python?

前言 编程语言排行榜三剑客Java、C、C,长期统治榜首,今日python重回榜首 (文末送福利) python的前世今生 1、最新动态 TIOBE排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎&#xff…

【算法篇-动态规划】手撕各大背包问题 —— 01背包

背包问题1. 最基础的背包 —— 01背包 (必看)1.1 分析1.2 状态转移方程 和 边界条件1.3 代码1.3.1 代码模拟1.4 空间复杂度的优化1.4.1 错误的优化方式1.4.2 正确的优化方式1.5 终极版优化总结本文章参考自 B站 董晓算法 董晓算法 1. 最基础的背包 ——…

Linux下git和gdb的使用

🚀每日鸡汤:生活不相信眼泪,即使你把眼泪流成珍珠,灰暗的生活也不会因此而闪光。 目录 一、使用git命令行 1.1安装git、配置仓库 Ⅰ.gitignore Ⅱ.git 1.2git的基本使用 二、Linux调试器-gdb 2.1、gdb的使用 2.2、 debug与…

矩阵求导简记

很多机器学习算法都需要求解最值,比如最小二乘法求解样本空间相对拟合曲线的最短距离,最值的求解往往通过求导来计算,而机器学习中又常用矩阵来处理数据,所以很多时候会涉及到矩阵的求导。矩阵求导就像是线性代数和微积分的结合&a…

熬夜肝出囊括Java后端95%的面试题解析

为大家整理了一版java高频面试题,其实,一直有大佬在面试,不是在面试,就是在面试的路上,2022其实不是个适合跳槽的年份,稳稳当当当然好,但是,也别委屈自己呀,话不多说&…

Kotlin编程实战——与Java互操作(10)

一 概述 Kotlin 中调用 Java 代码Java 中调用 Kotlin 二 Kotlin 中调用 Java 代码 Getter 和 Setter返回 void 的方法将 Kotlin 中是关键字的 Java 标识符进行转义空安全与平台类型Java类型映射kotlin类型Kotlin 中的 Java 泛型Java 可变参数 三 Java 中调用 Kotlin 属性实…

【ELM预测】基于matlab探路者算法优化极限学习机预测(含前后对比)【含Matlab源码 2204期】

一、探路者算法简介 提出的一种新兴的智能优化算法,该算法的思想起源于群体动物的狩猎行为,种群中的个体分为探路者和跟随者两种角色。算法的寻优过程模拟了种群寻找食物的探索过程,利用探路者、跟随者两种角色不同的位置更新方式以及角色间…

NR/5G - PUSCH repetition次数

--- R15 DCI format 0-1 PUSCH 38.214中的描述,DCI format 0-1调度的PUSCH,包括C-RNTI/MCS-C-RNTI动态DCI调度PUSCH以及CS-RNTI,NDI1时候指示的Configured Grant的重传调度PUSCH,通过PUSCH-Config中的pusch-AggregationFactor指示…

谷粒学院——Day02【环境搭建和讲师管理接口开发】

前后端分离概念 传统单体结构 前后端分离结构 前后端分离就是将一个单体应用拆分成两个独立的应用:前端应用和后端应用,以JSON格式进行数据交互。 后台讲师管理模块环境搭建 一、数据库设计 数据库 guli_edu 数据库 guli_edu.sql # # Structure fo…

3.1 Python 字符串类型常用操作及内置方法

文章目录1. 类型转换2. 字符串索引取值3. 遍历字符串4. 统计长度5. 字符串的复制与拼接5.1 字符串的复制5.2 加号拼接5.3 .join 方法拼接字符串6. 字符比较7. 成员运算8. .format9. .split10. .strip11 . .upper 与 .lower12. .isupper 与 .islower13. .startswith 与 .endswit…

15 个机器学习的基本 Python 库

一定有很多次你试图在 Python 中找到一个库来帮助你完成机器学习项目。但是,经常遇到一件事!今天有如此多的 Python 库可用,并且许多库在每几年之后都会大量发布,因此选择合适的库并不容易。 有时会花费数小时寻找合适的库&#…

【数据结构基础】之图的介绍,生动形象,通俗易懂,算法入门必看

前言 本文为数据结构基础【图】 相关知识,下边将对图的基本概念,图的存储结构,图的遍历包含广度优先遍历和深度优先遍历,循环遍历数组,最小生成树,拓扑排序等进行详尽介绍~ 📌博主主页&#xf…

spring启动流程(二):包的扫描流程

在applicationContext的创建中,我们分析了applicationContext的创建过程,在本文中,我们将分析spring是如何进行包扫描的。 依旧是AnnotationConfigApplicationContext的构造方法: public AnnotationConfigApplicationContext(St…

自底向上语法分析(bottom-up parsing)

自底向上语法分析(bottom-up parsing)自底向上分析概述LR分析概述LR(0)分析增广文法点标记项目LR(0)分析表CLOSURE函数GOTO函数LR(0)自动机的状态集LR(0)分析表构造算法LR(0)自动机的形式化定义LR(0)分析的冲突问题SLR分析SLR算法的关键SLR分析的冲突问题…

U3D热更新技术

作者 : SYFStrive 博客首页 : HomePage 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 🤷‍♀️:创作不易转发需经作者同意😈 💃:程…

适用于 Windows 的企业级 Subversion 服务器

适用于 Windows 的企业级 Subversion 服务器。 Subversion 的 Windows 身份验证 Windows 身份验证是 VisualSVN 服务器的一个关键特性。此功能专为 Active Directory 域环境设计,允许用户使用其 Windows 凭据访问 VisualSVN 服务器。 VisualSVN Server 支持两种不同…

【Linux】基础IO ——中

🎇Linux:基础IO 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看…

这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇将记录几次面试中经常被问到的知识点以及对学习的知识点总结和面试题的复盘。 本篇文章记录的基础知识,适合在学Java的小白,也适合复习中&…

趣说 Mysql内存篇 Buffer Pool

讲解顺序 先说 Mysql InnoDB 内存结构 Buffer PoolPage 管理机制Change BufferLog Buffer Buffer Pool 接上回 说到了 LRU 算法对内存的数据 进行淘汰 LRU 算法本身是 最近最少使用的,但是这样就会出现 分不清楚 哪些是真正多次使用的数据 LRU缺点&#xff1a…

软考重点10 知识产权

软考重点10 知识产权一、著作权1. 著作权的理解(1)版权:(2)人身权与财产权2. 知识产权的归属判定3. 知识产权的归属判定(1)委托创作(2)合作开发4. 著作权保护对象及范围5…