当前位置: 首页 > news >正文

【JavaEE进阶】获取Cookie/Session

🍀Cookie简介

HTTP协议自身是属于 "⽆状态"协议.

"⽆状态"的含义指的是:

  • 默认情况下 HTTP 协议的客⼾端和服务器之间的这次通信,和下次通信之间没有直接的联系.但是实际开发中,我们很多时候是需要知道请求之间的关联关系的.

例如登陆⽹站成功后,第⼆次访问的时候服务器就能知道该请求是否是已经登陆过了.

上图中输入用户名和密码,点击登录之后,将这个登录请求发送给服务器,这个请求携带着用户名密码信息发送给服务器,服务器将用户名和密码进行存储(session),生成一个sessionId(sessionId对应session信息)返回给客户端,存于cookie中,访问其他页面时就可以携带cookie进行访问。

上述图中的"令牌"通常就存储在Cookie字段中. ⽐如去医院挂号

  1. 看病之前先挂号.挂号时候需要提供⾝份证号,同时得到了⼀张"就诊卡",这个就诊卡就相当于患 者的"令牌".
  2. 后续去各个科室进⾏检查,诊断,开药等操作,都不必再出⽰⾝份证了,只要凭就诊卡即可识别出当 前患者的⾝份.
  3. 看完病了之后,不想要就诊卡了,就可以注销这个卡.此时患者的⾝份和就诊卡的关联就销毁了.(类 似于⽹站的注销操作)
  4. ⼜来看病,可以办⼀张新的就诊卡,此时就得到了⼀个新的"令牌"

此时在服务器这边就需要记录"令牌"信息,以及令牌对应的⽤⼾信息,这个就是 Session 机制所做的⼯作

🎄理解Session

要理解Session,我们先来理解一下会话

在计算机领域,会话是⼀个客⼾与服务器之间的不中断的请求响应.对客⼾的每个请求,服务器能够识别出请求来⾃于同⼀个客⼾.

当⼀个未知的客⼾向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 的区别

  • Cookie 是客⼾端保存⽤⼾信息的⼀种机制.Session 是服务器端保存⽤⼾信息的⼀种机制.
  • Cookie 和 Session之间主要是通过 SessionId 关联起来的, SessionId是 Cookie 和 Session 之间的桥梁
  • Cookie 和 Session 经常会在⼀起配合使⽤. 但是不是必须配合
  •          完全可以⽤ Cookie 来保存⼀些数据在客⼾端.这些数据不⼀定是⽤⼾⾝份信息,也不⼀定           是SessionId
  •          Session 中的sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递,⽐如通过URL传递

相关文章:

【JavaEE进阶】获取Cookie/Session

🍀Cookie简介 HTTP协议自身是属于 "⽆状态"协议. "⽆状态"的含义指的是: 默认情况下 HTTP 协议的客⼾端和服务器之间的这次通信,和下次通信之间没有直接的联系.但是实际开发中,我们很多时候是需要知道请求之间的关联关系的. 例如登陆⽹站成…...

在macOS上安装Flutter和环境配置

操作系统 Flutter 支持在 macOS 11 (Big Sur) 或更高版本上开发。本指南假定你的 Mac 默认运行 zsh shell。 如果你的 Mac 是 Apple silicon 处理器,那么有些 Flutter 组件就需要通过 Rosetta 2 来转换适配(详情)。要在 Apple silicon 处理器…...

【电子通识】PWM驱动让有刷直流电机恒流工作

电机的典型驱动方法包括电压驱动、电流驱动以及PWM驱动。本文将介绍采用PWM驱动方式的恒流工作。 首先介绍的是什么是PWM驱动的电机恒流工作,其次是PWM驱动电机恒流工作时电路的工作原理。 PWM驱动 当以恒定的电流驱动电机时,电机会怎样工作呢&#xff1…...

Maven在不同操作系统上如何安装?

大家好,我是袁庭新。Maven是一个重要的工具,还有很多初学者竟然不知道如何安装Maven?这篇文章将系统介绍如何在Windows、macOS、Linux操作系统上安装Maven。 Maven是一个基于Java的项目管理工具。因此,最基本的要求是在计算机上安…...

maven如何从外部导包

1.找到你项目的文件位置,将外部要导入的包复制粘贴进你当前要导入的项目下。 2.从你的项目目录下选中要导入的包的pom文件即可导包成功 注意一定是选中对应的pom文件 导入成功之后对应的pom.xml文件就会被点亮...

如何在 Hive SQL 中处理复杂的数据类型?

目录 一、复杂数据类型简介 二、创建表时使用复杂数据类型 三、插入数据到复杂数据类型的表 四、查询复杂数据类型...

数据结构:DisjointSet

Disjoint Sets意思是一系列没有重复元素的集合。一种常见的实现叫做,Disjoint-set Forest可以以接近常数的时间复杂度查询元素所属集合,用来确定两个元素是否同属一个集合等,是效率最高的常见数据结构之一。 Wiki链接:https://en…...

中国省级产业结构高级化及合理化数据测算(2000-2023年)

一、数据介绍 数据名称:中国省级产业结构高级化、泰尔指数 数据年份:2000-2023年 数据范围:31个省份 数据来源:中国统计年鉴、国家统计局 数据整理:内含原始版本、线性插值版本、ARIMA填补版本 数据说明&#xf…...

Nginx不使用域名如何配置证书

如果你不打算使用域名而是使用 IP 地址来配置 Nginx 的 SSL 证书,你会遇到一个问题,因为 SSL/TLS 证书通常是为特定的域名颁发的,而不是 IP 地址。虽然可以为 IP 地址生成证书,但大多数证书颁发机构(CA)不支…...

Perturbed-Attention Guidance(PAG) 笔记

Self-Rectifying Diffusion Sampling with Perturbed-Attention Guidance Github 摘要 近期研究表明,扩散模型能够生成高质量样本,但其质量在很大程度上依赖于采样引导技术,如分类器引导(CG)和无分类器引导&#xff…...

自动驾驶控制与规划——Project 6: A* Route Planning

目录 零、任务介绍一、算法原理1.1 A* Algorithm1.2 启发函数 二、代码实现三、结果分析四、效果展示4.1 Dijkstra距离4.2 Manhatten距离4.3 欧几里德距离4.4 对角距离 五、后记 零、任务介绍 carla-ros-bridge/src/ros-bridge/carla_shenlan_projects/carla_shenlan_a_star_p…...

通俗易懂之线性回归时序预测PyTorch实践

线性回归(Linear Regression)是机器学习中最基本且广泛应用的算法之一。它不仅作为入门学习的经典案例,也是许多复杂模型的基础。本文将全面介绍线性回归的原理、应用,并通过一段PyTorch代码进行实践演示,帮助读者深入…...

[离线数仓] 总结二、Hive数仓分层开发

接 [离线数仓] 总结一、数据采集 5.8 数仓开发之ODS层 ODS层的设计要点如下: (1)ODS层的表结构设计依托于从业务系统同步过来的数据结构。 (2)ODS层要保存全部历史数据,故其压缩格式应选择压缩比率,较高的,此处选择gzip。 CompressedStorage - Apache Hive - Apac…...

页面顶部导航栏(Navbar)的功能(Navbar/index.vue)

这段代码是一个 Vue.js 组件&#xff0c;实现了页面顶部导航栏&#xff08;Navbar&#xff09;的功能。我将分块分析它的各个部分&#xff1a; 模板 (Template): <!-- spid-admin/src/layout/components/Navbar/index.vue --> <template><div class"navb…...

thinnkphp5.1和 thinkphp6以及nginx,apache 解决跨域问题

ThinkPHP 5.1 使用中间件设置响应头 ThinkPHP 5.1 及以上版本支持中间件&#xff0c;可以通过中间件统一设置跨域响应头。 步骤&#xff1a; 创建一个中间件文件&#xff0c;例如 CorsMiddleware.php&#xff1a; namespace app\middleware;class CorsMiddleware {public fu…...

vue2新增删除

&#xff08;只是页面实现&#xff0c;不涉及数据库&#xff09; list组件&#xff1a; <button click"onAdd">新增</button><el-table:header-cell-style"{ textAlign: center }" :cell-style"{ textAlign: center }":data&quo…...

测试ip端口-telnet开启与使用

前言 开发过程中我们总会要去测试ip通不通&#xff0c;或者ip下某个端口是否可以联通&#xff0c;为此我们可以使用telnet 命令来实现。 一、telnet 开启 可能有些人使用telnet报错&#xff0c;不是内部命令&#xff0c;可以如下开启&#xff1a; 1、打开控制面板&#xff…...

Python爬虫基础——XPath表达式

首先说一下这节内容在学习过程中存在的问题吧&#xff0c;在爬取百度网页文字时&#xff0c;出现了问题&#xff0c;就是通过表达式在网页搜索中可以定位&#xff0c;但是通过代码无法定位&#xff0c;请教了一位老师&#xff0c;他说是动态链接&#xff0c;目前这部分内容比较…...

ansible-性能优化

一. 简述&#xff1a; 搞过运维自动化工具的人&#xff0c;肯定会发现很多运维伙伴们经常用saltstack和ansible做比较&#xff0c;单从执行效率上来说&#xff0c;ansible确实比不上saltstack(ansible使用的是ssh,salt使用的是zeromq消息队列[暂没深入了解])&#xff0c;但其实…...

高等数学学习笔记 ☞ 一元函数微分的基础知识

1. 微分的定义 &#xff08;1&#xff09;定义&#xff1a;设函数在点的某领域内有定义&#xff0c;取附近的点&#xff0c;对应的函数值分别为和&#xff0c; 令&#xff0c;若可以表示成&#xff0c;则称函数在点是可微的。 【 若函数在点是可微的&#xff0c;则可以表达为】…...

AI FUTURE北京亦庄AI未来大会在京启幕

4月8日&#xff0c;AI FUTURE北京亦庄AI未来大会在北京经济技术开发区&#xff08;简称“北京经开区”&#xff0c;又称“北京亦庄”&#xff09;北京智慧电竞赛事中心正式启幕。这场为期两天的人工智能盛会&#xff0c;以“让每个人看AI的另一面”为主题&#xff0c;集高端论坛…...

Nginx 正向代理与反向代理的区别

一&#xff1a;Nginx 正向代理与反向代理的区别 正向代理&#xff1a;替客户端出门办事 反向代理&#xff1a;替服务器接客办事生活化比喻&#xff08;最容易理解&#xff09; 1. 正向代理 你的代购 / 跑腿 你想买国外的东西&#xff0c;但你自己不方便/不能直接买。 你找一个…...

跨平台OpenClaw部署对比:Phi-3-mini-128k-instruct在Mac/Win/Linux表现

跨平台OpenClaw部署对比&#xff1a;Phi-3-mini-128k-instruct在Mac/Win/Linux表现 1. 测试背景与实验设计 去年夏天&#xff0c;当我第一次尝试在MacBook Pro上部署OpenClaw对接Phi-3-mini模型时&#xff0c;意外发现同样的自动化任务在同事的Windows设备上执行效率差了近40…...

ID12RFID库详解:嵌入式125kHz RFID读卡实践指南

1. ID12RFID 库深度解析&#xff1a;面向嵌入式系统的 125kHz RFID 标签读取实践指南ID12RFID 是一个专为嵌入式平台设计的轻量级 C/C 库&#xff0c;用于驱动 ID-12&#xff08;及兼容型号如 ID-20、RDM6300&#xff09;系列 125kHz 低频 RFID 模块。该模块采用 ASK 调制方式&…...

【信息科学与工程学】【管理科学】第十六篇 利益设计与分配:从静态薪酬到动态激励生态系统的工程化重构

1. 从静态薪酬到动态激励&#xff1a;一场组织动力系统的革命 记得三年前我参与过一家科技公司的薪酬体系改革项目。当时他们的CTO对我说&#xff1a;"我们给工程师的薪水在行业里算高的&#xff0c;但为什么总感觉大家没干劲&#xff1f;"这个问题困扰着无数技术管理…...

Python图书借阅管理系统实战

# 题目描述# 设计一个简单的图书借阅管理系统。系统初始包含若干本图书&#xff0c;每本图书的信息包括&#xff1a;# 书号&#xff08;字符串&#xff09;# 书名&#xff08;字符串&#xff09;# 作者&#xff08;字符串&#xff09;# 库存数量&#xff08;整数&#xff09;# …...

运维视角的测试:可观测性驱动的质量保障

在云原生与微服务架构盛行的今天&#xff0c;软件系统的复杂性已呈指数级增长。一个简单的用户请求&#xff0c;背后可能串联起数十个松耦合的服务&#xff0c;横跨多个云环境与基础设施层。传统的软件测试&#xff0c;其焦点往往集中于功能验证、性能基准测试与缺陷发现&#…...

不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico汉

1、普通的insert into 如果&#xff08;主键/唯一建&#xff09;存在&#xff0c;则会报错 新需求&#xff1a;就算冲突也不报错&#xff0c;用其他处理逻辑 回到顶部 2、基本语法&#xff08;INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)&#xff09; 语…...

强化学习基础与实践:从理论到应用

强化学习基础与实践&#xff1a;从理论到应用 1. 背景介绍 强化学习&#xff08;Reinforcement Learning&#xff0c;RL&#xff09;是机器学习的一个重要分支&#xff0c;它关注的是智能体&#xff08;Agent&#xff09;如何在环境中通过与环境的交互学习最优行为策略&#…...

拉普拉斯变换:从傅里叶到复频域的系统分析利器

1. 从傅里叶到拉普拉斯&#xff1a;为什么我们需要复频域&#xff1f; 第一次接触傅里叶变换时&#xff0c;你可能被它"时域转频域"的魔法惊艳到了——直到遇到一个尴尬问题&#xff1a;当信号不满足绝对可积条件时&#xff08;比如指数增长的信号e^t&#xff09;&am…...