登录认证-登录校验-会话技术

news2024/12/24 0:25:22

目录

会话技术

会话跟踪方案对比

方案一:Cookie

实现思路

具体代码

优点

缺点

方案二:Session

实现思路

具体代码

优点

缺点

方案三:令牌技术(主流方案)

实现思路

优点

缺点


会话技术

  • 会话:用户打开浏览器,访问web服务的资源,会话建立,直到一方断开连接,会话结束。在一次会话中包含多次请求和响应。
  • 会话跟踪:一种维护浏览器状态的方法,浏览器需要识别多次请求是否来源于同一个浏览器,以便在同一次会话的多次请求之间共享数据
  • 会话跟踪方案
    • 客户端会话跟踪技术:Cookie
    • 服务端会话跟踪技术:Session
    • 令牌技术

会话跟踪方案对比

  • 方案一:Cookie

    • 实现思路

      • 在浏览器第一次发送请求,请求服务器时,可以设置一个Cookie,在Cookie可以存储相关的信息,然后服务器端将Cookie自动(Set-Cookie:name=valie,用于设置Cookie的数据)响应给浏览器,浏览器接收到Cookie后,会自动将Cookie的值(name=value)存储到浏览器本地,以后的请求都会自动将存储在本地的Cookie中的数据(Cookie:name=value,用于携带Cookie的数据)传送到服务端,在服务端就可以获取到该Cookie的值,并且判断该Cookie中的值是否存在。
    • 具体代码

    • package com.example.tlias.controller;
      
      import com.example.tlias.pojo.Result;
      import jakarta.servlet.http.Cookie;
      import jakarta.servlet.http.HttpServletRequest;
      import jakarta.servlet.http.HttpServletResponse;
      import lombok.extern.slf4j.Slf4j;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      @Slf4j
      public class SessionController {
          @GetMapping("/c1")
          // todo 设置Cookie
          public Result cookie1(HttpServletResponse response) {
              response.addCookie(new Cookie("login_name", "hkm"));
              return Result.success();
          }
      
          @GetMapping("/c2")
          // todo 获取Cookie
          public Result cookie2(HttpServletRequest request) {
              Cookie[] cookies = request.getCookies();
              for (Cookie cookie : cookies) {
                  if (cookie.getName().equals("login_name")) {
                      System.out.println("login_name:" + cookie.getValue());
                  }
              }
              return Result.success();
          }
      }
      
    • 访问c1运行结果如下

    • 访问c2运行结果如下

      • 优点

        • Http协议中支持的技术
      • 缺点

        • 移动端APP无法使用Cookie
        • 不安全,用户可以自己禁用Cookie
        • Cookie不能跨域(跨域区分的三个维度:协议、ip/域名、端口)
  • 方案二:Session

    • 实现思路

      • Sesnsion是服务器端会话跟踪技术,Session是存储在服务器端的,其底层是基于Cookie实现的,在浏览器发送请求请求服务器时,服务器端会自动创建Session会话对象,每一个Session会话对象都会有一个ID,我们称之为SessionID,服务器响应浏览器时会将Session对象的ID通过Cookie响应给浏览器(Set-Cookie:JSESSIONID=1),浏览器会自动存储接受到的Cookie对象至本地,然后在后续的请求会将Cookie的值携带到服务端,服务器获取到Cookie的值(即Session的id),就会找到当前请求的会话对象Session。
    • 具体代码

      • package com.example.tlias.controller;
        
        import com.example.tlias.pojo.Result;
        import jakarta.servlet.http.Cookie;
        import jakarta.servlet.http.HttpServletRequest;
        import jakarta.servlet.http.HttpServletResponse;
        import jakarta.servlet.http.HttpSession;
        import lombok.extern.slf4j.Slf4j;
        import org.springframework.web.bind.annotation.GetMapping;
        import org.springframework.web.bind.annotation.RestController;
        
        @RestController
        @Slf4j
        public class SessionController {
        
            // todo 在HttpSession中设置session对象的值
            @GetMapping("/s1")
            public Result Session1(HttpSession session) {
                log.info("HttpSession:{}", session.hashCode());
                session.setAttribute("loginUser-s1","hkm");// 往Session对象中存储
                return Result.success();
            }
        
            @GetMapping("/s2")
            // todo 获取=session对象的值
            public Result Session2(HttpServletRequest request) {
                HttpSession httpSession = request.getSession();
                log.info("HttpSession-s2:{}", httpSession.hashCode());
                Object loginUser = httpSession.getAttribute("loginUser");
                log.info("loginUser:{}", loginUser);
                return Result.success(loginUser);
            }
        
        }
        
        
      • 访问s1运行结果如下:
      • 访问s2运行结果如下 

    • 优点

      • 数据存储在服务端,安全
    • 缺点

      • 服务器集群环境下无法直接使用Sesson
      • Cookie的缺点(Session的底层是基于Cookie实现的)
  • 方案三:令牌技术(主流方案)

    • 实现思路

      • 令牌是用户身份的标识,本质是一个字符串,浏览器发起请求,在请求登录接口时,如果登陆成功,服务端可以生成一个令牌,该令牌是该用户的合法身份凭证,接下来响应数据的时候就可以直接将令牌响应给前端,前端就会将令牌存储起来(可以存储在Cookie中也可以存储在其他存储空间中),接下来的每一次请求都会将令牌携带到服务端,服务端会校验该令牌的有效性。
    • 优点

      • 支持PC端、移动端
      • 解决集群环境下的认证问题
      • 减轻服务器的存储压力
    • 缺点

      • 需要自己实现

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

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

相关文章

网络安全实验室搭建与实践:提供搭建虚拟实验环境的指导

随着数字化时代的来临,网络安全问题变得愈发严重和复杂。在这个信息交织的世界里,了解并掌握网络安全已经成为刻不容缓的任务。而搭建一个稳定、真实的网络安全实验环境,成为学习和实践的必然选择。本文将为您详细介绍网络安全实验室的搭建过…

一所南方学校,遇上AI的60天

AI大模型的想象力是什么? 有的人认为是参数,有的人可能回答是逻辑和推理,还有的人给出的选项是数据新式表达。 而这些答案,都需要在 一个个真实的产业场景里被实践,被验证。 对谢柏芳和东区中学而言,这个…

python+django+mysql旅游景点推荐系统-前后端分离(源码+文档)

系统主要采用Python开发技术和MySQL数据库开发技术以及基于OpenCV的图像识别。系统主要包括系统首页、个人中心、用户管理、景点信息管理、景点类型管理、景点门票管理、在线反馈、系统管理等功能,从而实现智能化的旅游景点推荐方式,提高旅游景点推荐的效…

4.6 TCP面向字节流

TCP 是面向字节流的协议,UDP 是面向报文的协议 操作系统对 TCP 和 UDP 协议的发送方的机制不同,也就是问题原因在发送方。 UDP面向报文协议: 操作系统不会对UDP协议传输的消息进行拆分,在组装好UDP头部后就交给网络层处理&…

clickhouse一次异常排查记录

clickhouse中报错 关闭了自启动,删了status,重启了clickhouse还是报错 1,排查定时执行的脚本日志(每小时第5分钟执行) INSERT INTO quality0529.previously_reported_urls (url) SELECT url FROM quality0529.hourly_…

基于Python的文件销毁工具设计与实现【源码+论文+演示视频+包运行成功】

博主介绍:✌csdn特邀作者、博客专家、java领域优质创作者、博客之星,擅长Java、微信小程序、Python、Android等技术,专注于Java、Python等技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻…

系统架构设计高级技能 · 面向服务架构设计理论与实践

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

2023谷歌开发者大会直播大纲「初稿」

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

VS插件DevExpress CodeRush v23.1 - 支持Visual Studio ARM

DevExpress CodeRush是一个强大的Visual Studio .NET 插件,它利用整合技术,通过促进开发者和团队效率来提升开发者体验。CodeRush能帮助你以极高的效率创建和维护源代码。Consume-first 申明,强大的模板,智能的选择工具&#xff0…

2023MySQL+MyBatis知识点整理

文章目录 主键 外键 的区别?什么是范式?什么是反范式?什么是事务?MySQL事务隔离级别?MySQL事务默认提交模式?MySQL中int(1)和int(10)的区别MySQL 浮点数会丢失精度吗?MySQL支持哪几种时间类型&a…

Redis 7 教程 数据类型 基础篇

🌹 引导 Commands | Redishttps://redis.io/commands/Redis命令中心(Redis commands) -- Redis中国用户组(CRUG)Redis命令大全,显示全部已知的redis命令,redis集群相关命令,近期也会翻译过来,Redis命令参考,也可以直接输入命令进行命令检索。

【电路设计】单节锂电池使用

前言 最近在研究如何利用单节锂电池给3.3V单片机供电。 找到两个比较好的教程 单节锂电池如何转3.3V?升压还是降压? 锂电池接了保护板,就可以用五伏电压直接充电了吗? 其中上面提到的LDO,这里有一个型号&#xff1…

身为一个后端程序员如何快速制作后端管理系统的UI

前言 我的专业领域在后端开发上,前端我仅仅是熟悉,但是要从头开发一个前端UI界面有点难为人了。那么身为一个后端程序员我们怎么来开发后端管理系统UI界面呢? 方案1:现成的模版来套(有一定的前端基础,只是…

AI人工智能面试题

目录 01、监督学习和非监督学习? 02、常用的分类器有哪些,简述其原理? 03、逻辑回归(LR,Logistic Regression)与线性回归的对比 05、简述一下BP网络神经 06、AdaBoost的基本原理? 07、聚类算法——说一下你所熟悉的聚类的算…

数据隐私与安全在大数据时代的挑战与应对

文章目录 数据隐私的挑战数据安全的挑战应对策略和方法1. 合规和监管2. 加密技术3. 匿名化和脱敏4. 安全意识培训5. 隐私保护技术 结论 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏&…

开源网安受邀参加软件供应链安全沙龙,推动企业提升安全治理能力

​8月23日下午,合肥软件行业软件供应链安全沙龙在中安创谷科技园举办。此次沙龙由合肥软件产业公共服务中心联合中安创谷科技园公司共同主办,开源网安软件供应链安全专家王晓龙、尹杰受邀参会并带来软件供应链安全方面的精彩内容分享,共同探讨…

certbot-https证书自动续期

certbot是一个免费的开源项目是EFF的一部分,自动化的工具,用于帮助管理和续期SSL/TLS证书。它可以安装、配置和自动续期证书。 1、安装 snapd 将 EPEL 存储库添加到您的 CentOS 安装中。输入y回车继续安装 sudo yum install snapd; sudo systemctl en…

【算法】倍增-ST表

一.倍增 倍增是一种常用的算法技巧,通常用于优化时间复杂度。它的核心思想是将原问题分解成若干个规模较小的子问题,通过对子问题的求解来得到原问题的解。具体来说,倍增算法通常采用二分思想,将问题规模不断缩小,直到…

springcloud3 GateWay章节-Nacos+gateway(跨域,filter过滤等5

一 常用工具类 1.1 结构 1.2 跨域 Configuration public class CorsConfig {Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config new CorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowe…