单点登录


一说单点登录概念可能有些人会很陌生,下面来举个例子:
比如你在百度登录了用户,然后访问百度贴吧、百度翻译、百度文库。。。百度的一系列产品
。这其中我们只需要做一次登录就可以实现全品台登录。这就是单点登录实现的功能。
而且这是面试常见的一个问题。

常见单点登录实现的三种方式

  • 一、session广播机制实现
原理:session复制
这种方式是一种非常老的方式,在不同的模块中都复制一份session,当模块变的很多时,就会对资源造成极大浪费。耗时间且耗空间。
  • 二、cookie+redis实现
cookie是一种客户端技术,存储在浏览器等移动设备中。每次发送请求都会带着cookie值进行发送。
redis是一个非关系型数据库,基于key-value存储。

原理:在项目中任何一块登录后,将用户数据放到两个地方。
1.redis:在key中放 **一个随机生成的唯一的值** , 在value中放 **用户数据**。
2.cookie: 将redis中生成的key值放到cookie中。
访问项目中其他模块时,发送请求带着cookie进行发送。
然后通过cookie值在redis进行查询,如果能查到数据就说明当前状态是登录过。
  • 三、使用token实现
token: 按照一定规则(可自定义)生成字符串,字符串中可以包含用户信息
原理:在项目中某个模块登录,登录之后,按照规则生成字符串,把登录的用户信息包含到字符串中,再把字符串进行一个返回。
返回的方式:(1)把字符串通过cookie返回
            当访问其他模块是通过cookie的到token字符串,获取里面的用户信息,能获取到就代表登录了。
           (2)把字符串通过地址栏返回
            当再次访问其他模块时,每次访问都带着地址栏中的token字符串,在访问的模块里面获取地址栏中的字符串,将里面的用户信息取出。如果能获取到,那么就代表登录过