当前位置: 首页 > 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传递

🌲获取Cookie

要想获取Cookie,首先得有Cookie,由于Cookie是存储在客户端的,所以可以伪造,我们就可以通过postman伪造Cookie。

postman伪造Cookie:

步骤一:

步骤二:添加domain(domain可以理解为IP或者域名,例如:127.0.0.1, www.jd.com)

步骤三 :添加Cookie,也是键值对的方式添加

此时Cookie就构造好了,可以在Header中查看

浏览器伪造Cookie: 

伪造京东的Cookie,进入京东页面的开发者工具(F12):

通过上述操作,我们就构造好了Cookie,下面就通过代码来获取Cookie

在默认情况下,不管后端的接口是否会用到Cookie,前端在发送请求的时候,会把Cookie一起发送过来,那么服务器就只需要在请求里面拿取对应的Cookie即可。拿取Cookie有两种方式

传统的方式获取Cookie

有一个HttpServletRequest接口,和HttpServletResponse


http://www.mrgr.cn/news/83187.html

相关文章:

  • 机器学习之贝叶斯分类器和混淆矩阵可视化
  • 【Web】软件系统安全赛CachedVisitor——记一次二开工具的经历
  • IT面试求职系列主题-Jenkins
  • Effective C++读书笔记——item12(自定义拷贝构造函数和拷贝赋值运算符可能出现的问题)
  • Linux 环境(Ubuntu)部署 Hadoop 环境
  • 基于高斯混合模型的数据分析及其延伸应用(具体代码分析)
  • 强化学习入门
  • 【C++】16.stack和queue的使用
  • 【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集
  • UI自动化测试保姆级教程--pytest详解(精简易懂)
  • halcon三维点云数据处理(六)find_box_3d
  • 创建Java项目,并添加MyBatis包和驱动包
  • VSCode 中的 launch.json 配置使用
  • 腾讯云AI代码助手编程挑战赛-学习助手
  • Node.js中的fs模块:文件与目录操作(写入、读取、复制、移动、删除、重命名等)
  • 消息队列MQ(二)
  • C语言初阶习题【25】strcpy的模拟实现
  • ubuntu编译安装libvirt
  • 深度学习与计算机视觉 (博士)
  • 如何让用户在网页中填写PDF表格?
  • 【人工智能】基于Python与OpenCV构建简单车道检测算法:自动驾驶技术的入门与实践
  • AI大模型-提示工程学习笔记5-零提示
  • Spring Framework 5.3.x源码构建 (jdk-1.8, gradle 7.5.1, idea2024.3)
  • 【STM32+QT项目】基于STM32与QT的智慧粮仓环境监测与管理系统设计(完整工程资料源码)
  • 【深度学习】布匹寻边:抓边误差小于3px【附完整链接】
  • 用Python进行大数据处理:如何使用pandas和dask处理海量数据