【JavaEE】-- Cookie &&Session

HTTP协议自身是属于"无状态"协议。

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

但是在实际开发中,我们很多时候是需要知道请求之间的关联关系的,比如:保存登陆状态。

上图中的"令牌",通常就存储在Cookie字段中。

2. Session

会话:对话。

在计算机领域中,会话是一个客户端与服务器之间的不间断的请求相应。

当一个未知的客户向Web应用程序发送第一个请求时,就开启了一个会话;当客户结束会话或服务器在一个时限内没有接收到客户的任何请求时,会话就结束了。

服务器在同一时刻接收到的请求时很多的,对于同一个客户向服务器发送的请求,我们希望服务器能够识别出请求来自于同一个客户。

那么就需要在服务器这边记录每个会话以及用户的信息的对应关系。

Session是服务器为了保存用户信息而创建的一个特殊的对象。


session的本质

Session 的本质就是一个哈希表,这个哈希表中存储了一些键值对结构。

key:SessionID;

Value:用户信息。

SessionId是由服务器生成的一个唯一性字段;站在登陆流程上来看,也可以将这个唯一性字符串称为token.


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

注意: session默认时保存再内存中的,如果重启服务器则Session数据就会丢失。

Cookie是客户端保存用户信息的一种机制.Session是服务器端保存用户信息的一种机制.

Cookie 和 Session之间主要是通过 Sessionld 关联起来的, Sessionld 是 Cookie 和 Session 之间的桥梁。

Cookie 和 Session 经常会在一起配合使用.但是不是必须配合.

  1. 完全可以用Cookie来保存一些数据在客户端.这些数据不一定是用户身份信息,也不一定是Sessionld。

  2. Session 中的sessionld 也不需要非得通过Cookie/Set-Cookie 传递,比如通过URL传递.

相关推荐
驭渊的小故事1 小时前
MyBatis XML 开发实战:从配置到 CRUD 全解析
xml·java·mybatis
哦虎!6 小时前
【JavaEE】网络初识
java
for_ever_love__6 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
我是人✓7 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
欣栀♡7 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室8 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项8 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog8 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
秋饼8 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发
摇滚侠8 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记