当前位置:网站首页>登录模式:单一服务器模式、单点登录、token模式
登录模式:单一服务器模式、单点登录、token模式
2022-07-28 06:04:00 【opopmmm?】
登录模式:单一服务器模式、单点登录、token模式
引文:
一、单一服务器模式

过程如下:
1.用户向服务器发送用户名和密码,服务器验证后,将用户信息存在当前对话(session)中,向用户返回session_id,并将session信息都写入用户的Cookie中。
2.用户的每个后续请求都将通过在Cookie中取出session_id传给服务器。服务器收到session_id并对比之前保存的数据,确认用户的身份。
缺点:
单点性能压力,无法扩展。
分布式架构中,需要session共享方案,session共享方案存在性能瓶颈。
在早期的互联网业务中,一般是使用单一服务器模式。但随着互联网的飞速发展,互联网用户的体量不断增大,单一服务器模式存在单点性能压力,无法扩展,以及单点失效等问题,已经不适合如今的互联网业务了,因此更多的,我们现在一般采用分布式微服务的架构来搭建项目。
二、集群分布模式

采用分布式的架构后,为了避免出现用户在一个模块登录后,访问别的模块时还需要重新登录的问题,我们需要使用单点登录(single sign on SSO)的模式来实现用户登录功能,这样用户只需要在一个模块登录后,访问其他模块就无需重复登录了。一般来说,实现单点登录主要有以下三种方式。
一、session 广播机制实现
在用户登录了一个模块后,这个模块的服务器会将用户的登录信息保存在本机的session中,然后通过session的广播机制,将这台服务器session中的内容复制到其他模块所在服务器的session中,这样其他的模块也就得到了用户的登录信息,用户在访问其他模块时就不需要重复登录了。
缺点:
但这种模式会多次复制session中的内容,造成用户数据的冗余存储,因此并不推荐使用这种方式实现单点登录。
二、使用 cookie + redis 实现
用户在项目的任意一个模块登录后,该模块会将用户的登录信息放到 redis 和 cookie 中。
① 系统会先将用户的登录信息存入 redis中,其在 redis 的 key 值是生成的唯一值 (可以包含 IP、用户 id、UUID等值),value 值存放用户的登录信息。
② 然后系统会将这名用户在 redis 中的 key 值存入该用户的 cookie 中,用户每次访问任意模块时都会带着这个 cookie。
③ 用户在访问其他模块发送请求时,都会带着客户端的 cookie 进行请求,而客户端的 cookie 已经存入了该用户在 redis 中的 key 值,这样其他模块在处理用户的请求时,可以先获取用户 cookie中的 key 值,然后拿着这个 key 值到 redis 中进行查询,如果在 redis 中能查询到该用户相应的登录信息,就说明该用户已登录,就不需要用户进行重复登录了。
缺点:
认证服务器访问压力较大
三、使用 token + JWT 实现
1.什么是token
token又叫令牌,本质上就是一串无意义的字符串,一般放在请求头中,只要服务端能够从请求头中拿到token就能实现认证,但是用户信息是在服务器的每次请求都要用token去数据库中查询用户信息,数据库的压力太大了。
如果token携带了用户信息,不就不需要每次请求都访问数据库查了嘛,从token中直接解析出用户信息以及用户登录状态进行校验,这就是后来的JWT。给浏览器返回的token是一串带着用户信息的字符串。
2.什么是JWT
JWT全称是Java Web Token。其实就是特殊的token,理解起来就是携带着用户信息的token。所以JWT认证和token认证本质上是一样的。只不过token认证的用户信息是从数据库里查的。而JWT认证的用户信息是直接从token解析出来的。
3.token+JWT实现单点登录一般过程:
① 用户在项目的某个模块进行登录后,系统会按照一定的规则生成字符串,把用户登录之后的信息包含到这个生成的字符串中(token+JWT),然后系统可以将这个字符串返回,主要有两种返回方式:
(1)可以把字符串通过 cookie 返回
(2)可以把字符串通过地址栏返回
② 这样用户在访问其他的模块时,每次访问的地址栏都会带着生成的字符串(或者 cookie 中带着生成的字符串),被访问模块就可以获取地址栏中的生成字符串(或者获取 cookie 中的生成字符串),然后根据字符串获取用户信息,如果可以获取到用户的登录信息,说明该用户已登录,用户就不需要重复登录了。
边栏推荐
- Current limiting ratelimiter of guava
- Pytorch extracts the feature map of a certain layer
- Big talk persistence and redolog
- 每日一题——分割等和子集
- The underlying principles of RDB persistence and AOF persistence of redis
- 一口气学完4种 Redis 集群方案,真是各有千秋
- 细说共模干扰和差模干扰
- Summary of project experience
- Delete the nodes in the linked list - daily question
- 0727~面试题梳理
猜你喜欢
随机推荐
ThreadLocal那些事
cdn.jsdelivr.net不可用,该怎么办
The underlying principles of RDB persistence and AOF persistence of redis
细说共模干扰和差模干扰
项目经历总结
MySQL basic knowledge learning (II)
Niuke MySQL - SQL must know and know
JS secondary linkage Department
Short work priority SJF
Summary of RFID radiation test
链表中倒数第k个节点——双指
Deeply analyze the implementation of singleton mode
Daily question - split equal sum subset
磁环选型攻略及EMC整改技巧
Disassemble Huawei switches and learn Basic EMC operations
MySQL字段 不推荐使用 Null 的理由
It has been rectified seven times and took half a month. Painful EMC summary
Heroku operation summary
CAS vs Database optimistic lock
guava之EventBus








