登录态记录多方式 (面经篇 之 登录校验)

news2024/9/20 0:34:46

        首先 , 我们大多数知道的都是Token(JWT) , 和 session AND cookie 的两种保持登录态的方式。最原生的他们, 也就JWT 还能更上时代一点 , session在分布式, 基本上只有 在项目里吃灰, 但,session也可以变为适用于分布式,。

       1 。  我们都知道Redis 不仅可以用于作为缓存 和 分布式锁 之外, 其实 , 它还可以用户记录登录态。SpringSession。

         我记得好像是 原本的session 在浏览器的 domin中默认都是 localhost+你项目的端口号,localhost域名下的其他端口号,好像都是不行的, 比如从8080的session 到8081 session也会失效(重新生成了),就更别提 自己其他的域名,100%CORS警告,同源策略error,所以, 我们裤采用redis 来保持记录登录态;通过yml配置

先添加依赖 :

        <!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>2.6.4</version>
        </dependency>
session:
    store-type: redis

2 。 此外,我们还可以通过Hash来保持 一致性 , 在分布式 中,主要就是你的  session 只是一堆服务器中一个产生的 , 所以 这个session也只有在这个服务器中使用, 既然 , session不能做到跨域 , 那么我们可以让session 不进行跨域, “在哪产生,就在哪消费”,那就需要保持session 和 服务器之间的关系了。 我们通过nginx 将这session 发送给对应Hash code 的那台里

3.  还有比较笨的方法 就是 多一个服务器,就复制session到这个服务器 , 小企业,还能这么用 , 大企业一定不用这么傻的方式的

4 。 将session 存入 cookie 中 ,但这明显就是最傻的方式 , 浏览器不仅可以删除cookie登录信息, 更是可以篡改 你的cookie(给你项目赛个小的病毒) , 而且 cookie在浏览器的长度是有限的 (好像一般是4K)

        我最推荐的还是前三种方法 , 至少, 在我的项目 做技术选型时 , 这些都是考虑过的 , 毕竟, 如果, 你是想和其他人产生差异化, 并且 , 想保持自己独立的思考 , 我的建议是(也是对我自己说的)不要盲目随大流,做自己。言归正传,为什么 我要考虑这些方式呢?JWT虽好,但他肯定也还是 没有redis操控内存快的,(但,我不是富哥,redis服务器太贵了)

三者 比较

### 1. JWT (JSON Web Tokens)

JWT 是一种无状态的认证机制,用户身份验证成功后,服务器会生成一个包含用户信息的 token 并发送给客户端。客户端将此 token 存储在本地(如 cookie 或 localStorage),并在每次请求时将其放在 HTTP 头部(Authorization 字段)中。

**优点**:
- 无状态:不需要在服务器端存储 session 数据,减轻了服务器的负担。
- 跨域支持:因为 token 是由客户端持有的,所以支持跨域请求。
- 可扩展性强:适用于微服务架构。

**缺点**:
- 安全性:如果 token 泄露,攻击者可以利用它进行访问,因此需要使用 HTTPS 来保护 token 的安全。
- 时效性:token 过期后需要刷新,这通常通过 refresh token 来完成。
- 无法撤销:一旦 token 发出,在其过期前无法撤销,除非使用额外逻辑。

### 2. Redis 存储 Session

在这种方法中,用户身份验证成功后,服务器会在 Redis 中创建一个 session,并将 session ID 存储在客户端的 cookie 中。每次客户端发起请求时,都会携带 session ID,服务器则从 Redis 中获取相应的 session 数据。

**优点**:
- 高性能:Redis 是内存数据库,访问速度快。
- 分布式支持:Redis 支持集群部署,适合分布式环境。
- 灵活性:可以在服务器端实施更复杂的 session 控制逻辑。

**缺点**:
- 依赖 Redis:Redis 故障会影响 session 的有效性。
- 服务器端逻辑:需要在服务器端实现 session 的创建、更新、删除等逻辑。

### 3. Hash 一致性 + Nginx

这种方法通常用于分布式环境下的一致性哈希算法,通过计算用户的唯一标识(如 IP 地址或用户名)来决定其 session 的存放位置。Nginx 作为反向代理服务器可以根据哈希结果将请求转发到正确的后端服务器上。

**优点**:
- 负载均衡:可以通过哈希算法将请求均匀分配到不同的后端服务器。
- 一致性:相同用户的请求会被路由到相同的后端服务器,从而保持 session 的一致性。

**缺点**:
- 复杂度:实现相对复杂,需要维护哈希环。
- 扩展困难:当后端服务器增加或减少时,可能导致数据迁移。

### 总结

选择哪种方式取决于您的具体应用场景和技术栈。JWT 适用于无状态的服务,Redis 存储 session 则更适合有状态的应用,而一致性哈希 + Nginx 可能更适合需要高度一致性和负载均衡的场景。在实际应用中,也可能根据业务需求混合使用这些技术。(唉 , 真的奇怪, csdn默认不是markdown格式, 切换成markdown编辑,也还是感觉味不正,差点味道)

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

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

相关文章

828华为云征文|华为云Flexus云服务器X实例之openEuler系统部署Docker Compose管理工具Dockge

828华为云征文&#xff5c;华为云Flexus云服务器X实例之openEuler系统部署Docker Compose管理工具Dockge 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Dockge介绍2.1 Dockge简介2.2 Dockge功能…

华为云DevSecOps和DevOps

目录 1.华为云DevSecOps和DevOps 1.1 DevSecOps 1.1.1 核心功能 1.1.2 优势 1.2 DevOps 1.2.1 核心功能 1.2.2 优势 1.3 DevOps和DevSecOps的区别 1.3.1 安全性集成 1.3.2 自动化的安全工具 1.3.3 团队协作 1.3.4 质量与合规性 1.3.5 成本与风险管理 1.3.5 总结 …

添可2024新品发布会,让智能家电成为“美好家”的具象表达

9月19日&#xff0c;添可以“万物新生&#xff0c;智领美好家”为主题&#xff0c;于上海浦东美术馆举办2024年度新品发布会。 会上&#xff0c;添可凭借对智能家电与家居设计领域的深刻洞察&#xff0c;全新发布了芙万Art Station智能洗地机、芙万Artist洗地机、饮万水纪元净…

《拿下奇怪的前端报错》:npm install卡住了一个钟- 从原理搞定安装的全链路问题

相信前端的小伙伴稍微入行一段时间的&#xff0c;接触过不同的项目&#xff0c;就可能遇到过npm install卡住的情况&#xff0c;下面我就来分析下几种场景、定位的方法和解决办法。不再只是删除node_modules然后重来了&#xff0c;虽然它能解决80%的问题 1 npm install 的原理…

Vue 常用高级指令解析

Vue 高级指令的重要性 Vue 高级指令是一种扩展 Vue.js 框架的功能的方式&#xff0c;可以让你在处理 DOM 元素时具有更多的控制权。它们可以通过自定义指令的方式进行编写和应用。 高级指令的重要性在于&#xff0c;它们使开发者能够通过 Vue 框架来创建更加复杂和灵活的交互…

数据库函数

1.字符串函数 例子&#xff1a; 2.数值函数 例子&#xff1a; 3.日期函数 例子&#xff1a; 4.流程函数 例子&#xff1a; 参考视频&#xff1a;27. 基础-函数-字符串函数_哔哩哔哩_bilibili

FinGPT金融大模型

FinGPT仓库https://github.com/AI4Finance-Foundation/FinGPT 功能&#xff1a; Adviser。根据新闻判断市场情绪&#xff08;积极、消极、中性&#xff09;&#xff0c;给出投资建议。Quantitative Trading。定制属于自己的金融助手。叫它关注某几个股票、监测消息等。可以直…

Linux安装、Nginx反向代理、负载均衡学习

系列文章目录 第一章 基础知识、数据类型学习 第二章 万年历项目 第三章 代码逻辑训练习题 第四章 方法、数组学习 第五章 图书管理系统项目 第六章 面向对象编程&#xff1a;封装、继承、多态学习 第七章 封装继承多态习题 第八章 常用类、包装类、异常处理机制学习 第九章 集…

代码管理-使用TortoiseGit同步项目到Github/Gitee

1 什么是TortoiseGit TortoiseGit下载地址 TortoiseGit是Git的Windows桌面可视化工具&#xff0c;通过软件的操作来实现Git命令的效果&#xff0c;使所有的操作都能用图形化实现。TortoiseGit安装很简单&#xff0c;这里不对安装流程进行讲解。下载之后即可按照普通软件的方式…

无人机之AI跟踪篇

无人机的AI识别技术依托于计算机视觉和深度学习技术&#xff0c;实现了对目标的快速精准识别&#xff0c;在多个领域展现出了巨大的应用潜力和价值。以下是对无人机AI识别技术的详细解析&#xff1a; 一、无人机AI识别算法的基础原理 无人机AI识别算法主要基于先进的计算机视觉…

使用FLBOOK快速制作3D电子版翻页产品册

​随着数字化时代的到来&#xff0c;传统纸质产品册已逐渐无法满足人们快节奏、便捷的生活方式。而FLBOOK&#xff0c;一款强大的3D电子版翻页产品册制作工具&#xff0c;凭借其简洁的操作界面、丰富的功能和出色的展示效果&#xff0c;已成为越来越多企业的首选。 1.要制作电子…

Ceph官方文档_01_Ceph简介

目录 Ceph介绍Ceph介绍 Ceph可用于向云平台提供Ceph对象存储,Ceph可用于向云平台提供Ceph块设备服务。Ceph可用于部署Ceph文件系统。所有Ceph存储群集部署开始都是先设置每个Ceph节点,然后再设置网络。 Ceph存储集群需要以下内容:至少一个Ceph监视器和至少一个Ceph管理器,…

DA14531开发板原理图设计

一、TYPE-C接口: 二、基于CP2102的USB转UART: 三、UART串口电平转换&#xff1a; 四、扩展接口部分&#xff1a; 五、DA14531蓝牙部分&#xff1a;

【纯小白论文代码带读】医学图像分割MASDF-Net(问题产生及解决)

论文链接&#xff1a;https://www.semanticscholar.org/paper/MASDF-Net%3A-A-Multi-Attention-Codec-Network-with-and-Fu-Deng/6ab609eb93dfd12596032174ca9603712f5c050a 代码链接&#xff1a;https://github.com/Rayicer/TransFuse 初见面代码&#xff1a; Q&am…

多路径文件批量下载工具V1.0.3-支持批量下载文件到单独文件夹的工具-供大家学习研究参考

1、支持批量下载列表文件中的所有文件到每个文件指定的目录下。 2、支持TXT文件导入。 3、支持TXT文件拖入。 4、支持下载错误文件筛选导出。 5、支持单文件多线程下载。 6、其它功能还在开发中。 7、支持断点续传。 8、支持递归下载&#xff08;递归下载就是按照服务器目录结构…

【资料分析】刷题日记2

第一套 √ 2013-2016一共有13&#xff0c;14&#xff0c;15&#xff0c;16四年&#xff0c;亦即16 - 13 1 4年 √ 是多少倍 ③vs④&#xff1a;都是只给出了年均增速&#xff0c;③求的是其中一年的&#xff0c;无法确定&#xff1b;④求的是这个时段总共的&#xff0c;可…

web - JavaScript

JavaScript 1&#xff0c;JavaScript简介 JavaScript 是一门跨平台、面向对象的脚本语言&#xff0c;而Java语言也是跨平台的、面向对象的语言&#xff0c;只不过Java是编译语言&#xff0c;是需要编译成字节码文件才能运行的&#xff1b;JavaScript是脚本语言&#xff0c;不…

江科大笔记—OLED显示屏

OLED显示屏 OLED的GND接到负极&#xff0c;OLED的VCC接正极&#xff0c;同时也会接到stm32上的PB6和PB7 SCL接PB8 SDA接PB9 在Hardware文件夹里面放3个文件&#xff1a;OLED.c、OLED.h、OLED_Font.h OLED_Font.h:存的是OLED的字库数据&#xff0c;因OLED是不带字库的&#xf…

RK3568平台(网络篇)MAC地址烧录

一.max地址简介 MAC地址(Media Access Control Address)也称为硬件地址或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。在OSI模型中,第二层数据链路层则负责MAC位址 。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都…

Spring3~~~

目录 多例 后置处理器BeanPostProcessor XML配置 通过注解 AOP与后置处理器 JdbcTemplate jdbc.properties jdbc.xml Test 具名参数 DAO 声明式事务 GoodsDao GoodsService xml 传播机制 种类 隔离级别 超时回滚 如果是普通的java项目&#xff0c;xml文件放…