Cookie和Session实现登录的思路
1.我们在学习JavaWeb的初期时,无论是看视频还是看文章,大部分都会给我们讲解Cookie+Session实现登录,我在这里就不解释Cookie和Session是什么东西,我们直接进入到Cookie+Session是怎么实现登录的
Cookie+Session实现登录的场景: 在我们开发单体项目的时候
实现思路
- 前端访问了需要认证才能访问的权限
- 拦截器判断Session中是否含有对应的用户数据,没有则跳转到登录页面,有就放行
- 用户输入用户名和密码进行登录验证
- 查询数据库判断用户是否存在,没有则发送提示信息,提示用户去注册
- 查询到的用户数据存到Session中
- 下次拦截的时候,Tomcat会根据Cookie中的SessionID去服务器获取到对应的Session
思路图
Redis代替Session做登录
为什么要用Redis代替Session
随着业务的不断扩展,单体项目已经无法满足我们,我们逐步将单体项目扩大为分布式的项目,这样会出现一个问题,也就是在不同的服务器上面存储的Session是不一样的,这样拦截器验证的结果就会不一样,而我们面对的这个问题,一般有以下的解决方案
常用的方式
- Session的复制(现在已不适用,因为会导致数据冗余)
- Cookie+Redis
- Token
我们这里主要介绍的Cookie+Reids的模式,这里为什么使用Redis,以及除了Redis还有没有其它的方式,肯定是有的,但是我们不多做介绍
Redis+Cookie实现登录的思路
- 前端访问了需要认证才能访问的权限
- 拦截器查询ThreadLocal中是否含有用户的数据,有就放行,没有就是进行下一步
- 拦截器获取到Cookie(Header)中保存的用户的Id
- 根据Id拼接出来的Key去Redis中查找到到用户的数据,如果无,则跳转到用户登录页面,有就获取到用户的数据,保存到当前的ThreadLocal中,放行
- 没有跳转到用户的登陆页面
- 根据用户传递过来的表单数据查询数据库
- 数据库中有,就将用户数据格式化后存入到redis中,并且设置过期的时间(模仿Session的默认30分钟失效)
- 数据库没有,就将提示用户需要注册
思路图
由于redis可以是在主服务器之外的服务器,所以它不会出现一个服务器中有,一个服务器中无用户数据的情况,我们可以通过搭建Redis的主从集群来增强系统的高可用性
最后,这是我第一次写博客,希望大家可以指出我的博文中的错误,谢谢