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

登录校验会话技术

目录

什么是会话?

会话跟踪

为什么要在同一次会话的多次请求共享数据?

方式一:Cookie

HttpServletResponse

方式二:Session


什么是会话?

在web开发中,会话指的是浏览器与服务器之间的一次连接,我们称为一次会话。

会话跟踪

服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据

为什么要在同一次会话的多次请求共享数据?

登录的过程中有验证码,这个验证码是请求服务器端动态生成的,所以前端要想呈现出这个验证码,此时要发送请求给服务器端,服务器端生成一个验证码后,再将这个验证码图片响应给前端,前端再将其展示出来,这次请求完成后会话就建立了,然后输入用户名密码和验证码后就可以点击登录,当点击登录按钮的时候又要发送第二次请求,那这次请求的就是登录接口,在服务器端依然要校验验证码的正确性,而正确的验证码是上一次请求生成的,那上一次生成的验证码之后它会把这个验证码记下来,然后在登录的过程中会将页面传递的验证码正确的验证码进行比对,如果页面传递的验证码和上一次请求的验证码是一致的,这个时候就代表这个验证码是正确的

第一次请求需要记录验证码的值是多少,而第二次发起登录请求的时候,它又要去获取上一次登录请求的这个数据,这个时候就要在同一次会话的多次请求之间共享数据了,那就可以通过会话跟踪技术解决这个问题

会话跟踪技术有两种

方式一:Cookie

cookie是客户端会话跟踪技术,它是存储在客户端浏览器的,

当我们在浏览器端直接访问登录这个接口时,如果所传递的用户名和密码都是正确的,此时就可以成功登录,登录成功后我们就可以在服务器端创建这么个Cookie对象,然后将多次请求之间需要共享的数据存储在Cookie中,比如在Cookie中存储当前用户存储成功的标识,然后紧接着就可以给前端响应数据了,而在响应数据的时候,这个Cookie会自动的响应给浏览器,而浏览器接受这个Cookie后,浏览器会自动的把这个Cookie存储在本地,并且在之后的每一次请求中,都会将这个Cookie自动的携带到服务器端,服务器端拦截到前端所发起的请求后就可以获取到Cookie中存储的数据了,然后去校验这个用户的登录信息是否存在,如果这个用户已经登录了,我们就直接放行,让它去访问对应的资源,如果携带过来的Cookie并没有存储用户的信息,就直接给前端响应一个错误的结果,那他去登录就可以了,这就是基于Cookie对话的流程

那为什么一切都是自动的呢?

Cookie虽然不是http协议的一部分,但是在http协议中对Cookie提供了支持,提供了两个头,一个是响应头,一个是请求头,当我们在服务器端给前端响应Cookie的时候,最终会自动的在响应头中添加(Set-Cookie)告诉浏览器我们要设置Cookie了,Cookie里面存储的数字形式就是Key=value,紧接着浏览器接收到相应回来的数据之后,一旦发现有个(Set-Cookie)的响应头,它就将这个Cookie自动的保存到浏览器本地,并且在之后的每一次请求后,它都会将浏览器保存的Cookie携带到服务器端

因为在HTTP协议中又提供了另外一个请求头,这个请求头叫Cookie,在Cookie这个请求头中,它就会自动的将当前浏览器所保存的Cookie数据一并携带到服务器端,服务器端就可以获取到请求头传来的Cookie,然后去校验当前Cookie是否存储当前登录的用户信息,这就是Cookie的优点,它是HTTP协议中所提供的两个技术,一个相应头,一个请求头

HttpServletResponse

HttpServletResponse服务器对客户端的 HTTP 响应

方式二:Session

是服务器端会话跟踪技术,所以是存储在服务器端的。

浏览器在第一次请求服务器的时候,我们就可以直接在服务器当中来获取到会话对象Session。如果是第一次请求Session ,会话对象是不存在的,这个时候服务器会自动的创建一个会话对象Session 。而每一个会话对象Session ,它都有一个ID(示意图中Session后面括号中的1,就表示ID),我们称之为 Session 的ID。

接下来,服务器端在给浏览器响应数据的时候,它会将 Session 的 ID 通过 Cookie 响应给浏览器。其实在响应头当中增加了一个 Set-Cookie 响应头。这个 Set-Cookie 响应头对应的值是不是cookie? cookie 的名字是固定的 JSESSIONID 代表的服务器端会话对象 Session 的 ID。它会在响应头Set-Cookie中,将服务器端当前会话对象Session的id值一并返回给浏览器,浏览器会自动识别这个响应头,然后自动将Cookie存储在浏览器本地。

接下来,在后续的每一次请求当中,都会将 Cookie 的数据获取出来,并且携带到服务端。接下来服务器拿到JSESSIONID这个 Cookie 的值,也就是 Session 的ID,是Session会话的唯一标识。那就可以根据这个标识找到对应的Session会话对象,然后再从会话对象中获取到我们之前存储的信息


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

相关文章:

  • Java中的String类
  • flask学习3-深入
  • pytest结合allure
  • 建筑兔零基础自学python记录39|实战词云可视化项目——章节分布10(上)
  • 【愚公系列】《Python网络爬虫从入门到精通》041-Matplotlib 图表的常用设置
  • 从0开始的操作系统手搓教程23:构建输入子系统——实现键盘驱动1——热身驱动
  • upload-labs靶场 1-21通关
  • Linux12-UDP\TCP
  • 正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-2.1 uboot简介
  • 【Mac】MacOS系统下常用的开发环境配置2025版
  • MRI学习笔记-Meta分析之SDM-PSI
  • Java集合面试题(持续更新)
  • leetcode15 三数之和
  • 嵌入式学习第二十三天--网络及TCP
  • 数据开发岗位: 面试测试题(2025年)
  • Android车机DIY开发之软件篇(二十)立创泰山派android编译
  • upload-labs详解(1-12)文件上传分析
  • 【人工智能】Open WebUI+ollama+deepSeek-r1 本地部署大模型与知识库
  • Linux和gcc/g++常用命令总结
  • 【全球化2.0 | ZStack发布Zaku容器云海外版 加速亚太生态布局