现在各个网站普遍使用的登录认证方式是使用短信认证登录,并且在用户与服务器交互的过程中这部分功能需要被多次调用,所以在项目中不可避免地要包括这一部分,学习之后,在此记录其流程:
实现短信认证登录可以有两种方式:基于session实现和基于redis实现。
基于session实现的过程如下:
如上图是黑马程序员课程中的一张图,描述了短信登录的过程,这一过程分为三部分分别实现:
1. 发送短信验证码:
- 用户在手机号输入框中输入一个手机号,然后点击发送验证码
- 系统校验这个手机号是否是一个正确的手机号
- 如果这个手机号不合法,则需要用户重新输入
- 如果合法,则系统根据规则生成一个验证码,并且将这个验证码存储到session域中,同时以短信形式发送给用户提供的手机号
2. 短信验证码登录、注册
- 用户收到验证码之后,输入验证码并点击登录
- 系统校验手机号(再次校验防止被修改)和验证码
- 如果验证码和session域中的的不一致,认证失败,重新验证;
- 如果验证成功进行到下一步
- 用户根据手机号登录,有可能这个手机号是第一次使用,即系统中不存在对应的用户,则创建一个新的用户,初始化必要的信息,保存到数据库中
- 此时数据库中存在一个对应的用户,将这个用户信息保存到session域中以后使用。
3. 校验登录状态
- 当用户发送请求的时候,首先判断用户是否登录,即session中是否存在用户信息,如果存在,说明用户已经登录,否则拦截请求并跳转到登录页面。使用拦截器实现。
基于redis实现:
基于session实现存在问题是:当有多个服务器的时候,session共享困难。一种解决的办法是基于redis实现。
基于redis实现的过程与基于session的过程基本一致,不同的地方在于信息不是存储在session中,而是redis中。另外一个不同点在于,由于使用redis,所以数据是不同的用户都可以访问到的,而在session中,则只有当前用户可以访问到;所以数据在redis中的存储必须为每组数据赋值为一个独一无二的键值,并且在验证登录成功之后需要将这个键值返回给客户端。