短信验证清理验证码

java后台
关于短信验证码的问题本想把验证码放到session中,一提出就被否决了。说不好管理。因为时效只有两分钟。
现在方案是这样的 两个map 以输入文本框的手机号码为key 值。 分别放入 截至时间 和 验证码。然后通过第三短信平台发送的验证码和现在对比做逻辑。 问题是。假日2分钟后没人输入验证码。重新发送的验证码要失效才行。我本想写个定时器的 但是2分钟内它一直开着。如果同一时间。其他人就没法操作了 。希望给位指导下 别说redis。不会它。或者大家给个解决方案吧 什么时候清除合适

墨色风雨
浏览 397回答 4
4回答

白衣染霜花

设置一个有效期长量,如 120 秒用户申请短信验证码服务端根据用户的手机号创建记录:创建时间、手机号、验证码、激活状态(默认为否)提交第 3 方短信平台(如果有必要等结果再对条目的状态做标记,那就另说)用户提交验证,服务端读取『手机号+验证码』及创建时间倒序的第 1 条,,过期,直接驳回没过期,继续下面的业务,将数据库里条目状态标记为已激活如不存在,直接驳回(可能被删了,也可能是手机号码、验证码之一不正确)如已存在,检查过期时间(用户提交时间-条目创建时间是否小于等于 120 秒)与此同时,跑一个定时脚本,每隔 10 分钟啊 20 分钟去删数据:已验证的。距离脚本操作时间大于 120 秒或更长时间的;希望有用。

繁花不似锦

Redis清除过期缓存就两种办法:根据key获取value时判断是否过期通过一个过期队列(根据过期时间排序)来清除过期数据所以对于验证码这种也可以考虑这么做:方案一: 在输入验证码之后,判断验证码是否正确的时候,如果验证码正确,判断一下验证码是否过期。方案二: 将手机号码,验证码存储到一个Map中,同时将手机号码,过期时间存储到DelayQueue中。另起一个线程,不断地从DelayQueue中获取元素,将获取到的元素从Map删除。这两个方案可以同时都用,或者只用其一。DelayQueue: 延时队列,Blocking队列,内部实现是用一个Priority队列,以延迟时间作为比较的依据。只有达到延迟时间之后元素才可以被获得,可用于清除空闲连接,过期缓存,超时任务等(例如缓存,将缓存对象放到DelayQueue中,delay时间等于缓存过期时间,运行一个deamon线程从DelayQueue中获取元素,然后将其清除)。

吃鸡游戏

你直接试试SUBMAIL短信平台吧。在线发送就可以,他们这个平台本身就能设置定时。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java