客户登陆通过手机发送验证码登陆,如何防止同一个手机号频繁获取验证码,目前获取的短信存入数据库中,期待大神给个好的方案。
做这种功能我们都会去参考一些大型软件,因为这些软件基本都是满足用户的使用习惯。
所以,当你注册淘宝啊等等一些软件的时候,它会加入一个倒计时的操作,这样在前端就控制住了不能够频繁点击
的问题,也符合用户的使用习惯,谢谢!
使用redis缓存做键值对存储,手机号做key,验证码做value,然后做上过期时间。用户发起请求验证码时就去redis里面找,如果key存在则不发短信并提示,如果不存在,则发送短信
这个问题和其他答案水平都太低!作为项目大量用到短信验证码的我真的看不下去了!
问题本身,限制给同个用户频繁发送短信,这种需求还要提吗?不就是缓存到redis或mongodb或mysql,发送的时候检测下。
而用到短信验证码,更加关键的是防止短信接口被盗刷,也就是给不同用户频繁发送短信,这个问题竟然没有提出来。唉,segmentfault的整体技术水平,讨论氛围还是不够的。
如果不想费心,还是试试一些集成的账号系统吧,比如 http://www.onlyid.net 的。就不要再提这种问题浪费大家时间了。
对于发送短信的限制,在客户端和服务端都要加上限制,客户端比较容易,给按钮加个倒计时就能防住大部分的小白用户。服务器端,使用Redis的setex是个很好的方法,可以在成功发送短信给某个手机号后使用setex命令加入一个有时限的标志位。如果这个标志位存在的话,就不发送并提示错误。比如这样
当然上面的限制属于比较简单的,你也可以根据需要加入IP,Session方面的限制。