什么是单点登录:
类似于百度的页面首页,等登录了百度账号,切换到百度贴吧,百度地图等百度其他功能,会默认登录,这就叫单点登录。
以上例子如下图:
单点登录的三种常见方式:
一:session广播机制实现(早期使用)
以百度举例,百度首页登录百度账号,存储session,然后复制到百度贴吧跟百度网盘模块中,在每个模块中都有你登录之后的session对象,做一个session复制,这样我们的一个登录就可以做到。
但这种方式有很多缺点,对于早期项目,模块不多,使用这种方式没什么问题,但是如果我们项目中有几十个模块,那我们这个session就要复制几十次,每次复制都会对我们的资源造成极大的消耗,同时因为复制的每个session都相同,会造成数据重复,浪费空间,所以这个方法并不适合多模块项目。
二:使用cookie+redis实现
cookie:客户端技术,客户端每次发送请求都会带着cookie进行发送
redis:内存数据库,读取速度快,基于key-value存储数据
实现方法:
在项目的任何一个模块中进行登录,登录之后,把数据放大两个地方
redis在key中生成唯一随机值(ip,用户id),在value存放用户的数据,将cookie里面生成的key值放入cookie中,项目其他模块发送请求带着cookie进行发送,获取cookie的value值,实现单点登录(把cookie获取的唯一值,到redis进行查询,根据key进行查询,如果有数据,就代表已经登录)。
三:使用token实现(令牌)
token:按照一定规则生成字符串,字符串中包含用户的信息
实现方式:
1.在项目中某个模块登录之后,按照规则生成字符串,把登录之后的用户包含到生成字符串中,把字符串返回,可以把字符串通过cookie返回,也可以把字符串通过地址栏进行返回。
2.再去访问项目中其他模块,每次访问在地址栏带着生成字符串,在访问模块里面获取地址栏中的字符串,根据字符串获取用户信息。