存储短信验证码有如下几种方式:
1 Cookie
Cookie存在客户端即浏览器,可以被修改。因此,即使加密了,也不可靠。
2 Session
Session存在服务端即服务器,虽然安全并且可以设置失效时间,但是Session会受到客户端即浏览器的影响,因为关闭浏览器后Cookie不可用会使得Session不可用,即使Session未超时。另外,Session一般只存储用户id。
3 数据库
验证码存在数据库后每次访问数据库都会消耗很多资源。作为临时数据,验证码不需要持久化,没有必要存入数据库。
注:正常状态指手机号已注册且没有被封号,条件语句中的手机号有时指手机号对应的用户,验证信息指验证码和有效期,下同。
获取验证码的流程图如下:
注册的流程图如下:
重置密码的流程图如下:
4 内存
在内存中通过HashMap来存储key手机号和value验证信息(包括验证码和有效期)的键值对。ConcurrentHashMap不允许key或value为空。
获取验证码的流程图如下:
注册的流程图如下:
重置密码的流程图如下:
5 Redis缓存
采用高可用集群的配置方式来实现Redis缓存,高效率且低消耗,有利于实现高并发。
参考资料