单点登录的常见三种方式
session广播机制实现(session复制)
在早期的项目当中,使用的就是这个方式,但现阶段已经不适用了,如果服务个数比较少还能使用,当服务个数过多,在进行session复制时,不仅仅消耗性能,还造成很多重复数据,占用空间内存。
使用cookie + redis实现
步骤
- 在任何一个模块登录成功之后,需要将信息写入到两个地方:
(1)先在redis中存储一个用户信息的键值对,key:全局唯一的一个字符串 value:用户的信息;
(2)将redis中的key放入cookie中。 - 在调用其他服务时,会将cookie中的key值跟随请求进行发送,获取cookie值,拿着cookie做事情:
(1)把cookie获取到的值作为key到redis中进行查询,如果查询到有数据就是登陆状态。
使用token实现
token是什么?
按照一定规则生成字符串,字符串可以包含用户信息。
步骤
- 在项目中某个模块进行登录,登录之后按照规则生成字符串,把登录之后用户包含到生成字符串里面,把字符串返回
(1)可以把字符串通过cookie返回
(2)把字符串通过地址栏返回 - 再去访问项目其他模块,每次访问在地址栏带着生成的字符串,在访问模块里面获取地址栏字符串,根据字符串获取用户信息。如果可以获取到,就是登录状态。