验证码验证 + 单点登录简单理解

注册时验证码验证 问题

情景:在开发速印后端的时候,有发验证码验证这一环节,当时是把验证码发给前端和用户,然后前端来判断是否匹配。

现在又回到了这个问题,正常来说,肯定是后端来验证这个验证码,那要怎么验证呢?

cookie + session,用户申请账号时,设置一个cookie,然后用户传来验证码时,通过cookie来判断这个用户对应的验证码是哪个

可能描述的不是很清楚,再描述一下问题:如果多个用户同时注册,怎么区分每个用户对应哪个验证码呢?

两种解决方案:
1、使用了cookie + 验证码的键值对存到redis上
2、使用邮箱+验证码存在redis上

第一种情况不适用于:在手机和电脑上同时注册,手机申请发送验证码,然后电脑上天收到的验证码。

1、验证码的有效期

放在redis上面,key就是cookie里面的值,value就是验证码,然后设置一个有效期。

哈哈,终于用上了redis,虽然应用很简单。

2、单点登录 Sign Single On

在想通上面的实现方式,又联想到经常遇到的单点登录,然后又去了解了一下。

这里记录一下,给自己留下一些学习的痕迹。

2.1 单系统登录

单系统登录很完美,通过cookie + session 来记录用户是否登录

2.2 分布式多系统 (如何实现登录一个系统,就能访问所有的系统)

如果通过个网站,但是访问不同的模块(每个模块放在单独的服务器上),怎么实现登录其中一个模块,访问其他模块的时候,不需要重新登录?也就是怎么实现所有模块只需要登录一次即可?

没看别人的博客之前,我想着可以这样实现:只要一个服务器登录了,就session 放在一个其他所有服务器都能拿到的地方,比如redis集群上,这样就可以实现登录一次,其他服务器也就都登录了。

后面看了博客,发现这种实现方式叫做共享cookie

共享cookie的缺点:

cookie是由浏览器保管的,每次访问一个网站,浏览器会自动把这个网站之前留下来的cookie放在请求里面发过去。

所以如果要实现共享cookie,首先要保证域名要和cookie对应,这就限制了所有服务器的域名要是同一个。可以是父子域名。

并且cookie本身也是不安全的。

2.3 SSO 单点登录(完美的实现了多系统只需要登录一次)

1、加一个认证中心,认证中心,用户如果没有登录,就跳转到授权中心进行登录。

2、登录成功,授权中心创建一个全局session,然后返回一个令牌给服务器,同时在用户的存一个cookie

3、服务器向认证中心发送令牌,看令牌是不是有效的。如果有效,就用这个令牌创建和用户的局部会话。

4、认证中心还会把这个服务器的地址存下来,用来全局注销的时候用。

全局注销:

服务器收到注销请求,向注册中心请求注销

注册中心收到请求,根据令牌对应的所有服务器地址,请求所有服务器注销局部session。

了解了这个,模拟在【寻宠】里实现单点登录

我写的可能只有我能看懂,推荐你们来这篇:什么是单点登录(原理与实现简介)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值