Redis 应用场景之短信验证码

应用场景

OSChina 账号注册 为例...讲错了请留言批评指正...

逻辑场景

  • 用户操作: 用户输入手机号, 然后点击获取验证码.
  • 前端逻辑: ajax 发起请求, 参数带上手机号.
  • 后端逻辑: 获取请求参数, 生成6位数验证码, 给指定手机号发送短信, 并缓存一个30秒过期的键值, mobilephone=checkcode, 比如 135xxx=123456

用 redis-cli 操作的话命令如下:

// 设置一个缓存 key=手机号 value=验证码, 30秒后过期自动删除
127.0.0.1:6379> set 135xxx 123456
OK
127.0.0.1:6379> expire 135xxx 30
(interger) 1
  • 用户操作: 用户收到短信验证码后,输入验证码,点击注册.
  • 前端逻辑: ajax 请求接口, 参数带上发送手机号 & 短信验证码.
  • 后端逻辑: 拿着请求参数中的手机号做为 redis key 去找值

用 redis-cli 操作的话命令如下:

127.0.0.1:6379> get 135xxx
"123456"

如果没过期的话会输出对应的验证码 "123456", 程序里做判断比对.

如果等待30s过期的话, redis-cli 操作输出如下:

127.0.0.1:6379> get 135xxx
(nil)

会输出(nil), 代表无, 这个缓存键及值直接被 redis 自动删除了. 这个时候页面可以提示用户 "验证码过期请重新获取验证码" 之类的.

注意事项

  • key 要唯一, value 允许重复, 这里充分运用了 redis set 自带去重属性, mobilephone:=checkcode(最新的验证码)
  • 你一不小心输错成了别人手机号, 那个人也账号在注册,并且你们2的验证码一不小心是一样的 - 所以为了安全考虑不要单纯只拿手机号和验证码作为注册和登录的依据,非常不安全,现在很多app就是这样干的,为了让你尽快注册放弃了很大安全性。想想上面的注册登录换成支付场景, 所以验证码通常是30-60秒的有效期, 如果恶意去尝试的会直接过期了. 如果查手机号的话, 这么短的时间内也试不了几个手机号. 通过时效性来保障相对的安全性.
  • ...

原文地址:https://www.cnblogs.com/taadis/p/12111672.html

时间: 2024-08-29 22:54:23

Redis 应用场景之短信验证码的相关文章

安卓CountDownTimer实现全民夺宝抢购倒计时和短信验证码倒计时

在sina里看到了什么全民夺宝的链接,然后忍不住1元的诱惑被坑了10多块,什么都没有抽到,但是还是有人抽到了不知道是不是坑爹的,然后也就动手做一下倒计时的功能. 先看全民夺宝: 说起这个功能是不是感觉so easy,然后就以此来搞2个倒计时效果,顺便也学习一下CountDownTimer的使用. 哈哈,看看今天实现的效果图: 回顾 常用的倒计时方式 方法一 Timer与TimerTask(Java实现) public class timerTask extends Activity{ priva

短信验证码发送校验类 Redis+php

<?php class Api_Sms{ const EXPIRE_SEC = 1800; // 过期时间间隔 const RESEND_SEC = 60; // 重发时间间隔 const ONE_DAY_FREQ = 5; // 每日向同一个手机号发短信的次数 const ONE_DAY_IMEI_COUNT = 3; // 每日向同一个手机号发送短信的IMEI个数 public $error = array(); /** * 向指定手机号发送验证码 * @param $mobile * @p

Yii2在Form中处理短信验证码的Validator,耦合度最低的短信验证码验证方式

短信验证码在目前大多数web应用中都会有,本文介绍一个基于Yii2 Validator方式的验证码验证方式. 在其他文章中看到的方式大多比较难做到一次封装,多次重用. 使用此方式的好处自然不用多说,Validator支持在Model和Form中使用,使用的时候只需要在rules中添加一条验证规则即可. 第一步: 准备数据表,用来存储短信验证码 CREATE TABLE `tbl_sms_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `to` varch

正规短信验证码

1.松耦合可拓展短信验证码一般需要三张表,msg(短信记录表)msg_cfg(短信记录与模板关联表)msg_form(短信模板表) package com.qianmo.qmyj.bean.dto; /** * 短信验证码表 */ public class Msg { private String moblNo;//手机号 private String msgCodeType;//验证码类型 private String msgCode;//验证码 private String aplDateT

php实现的IMEI限制的短信验证码发送类

<?php class Api_Sms{ const EXPIRE_SEC = 1800; // 过期时间间隔 const RESEND_SEC = 60; // 重发时间间隔 const ONE_DAY_FREQ = 5; // 每日向同一个手机号发短信的次数 const ONE_DAY_IMEI_COUNT = 3; // 每日向同一个手机号发送短信的IMEI个数 public $error = array(); /** * 向指定手机号发送验证码 * @param $mobile * @p

flask开发restful api系列(5)-短信验证码

我们现在开发app,注册用户的时候,不再像web一样,发送到个人邮箱了,毕竟个人邮箱在移动端填写验证都很麻烦,一般都采用短信验证码的方式.今天我们就讲讲这方面的内容. 首先,先找一个平台吧.我们公司找的容联云通讯这个平台,至少目前为止,用的还可以.先在容联上注册一下,然后创建一个应用,如下图所示: 我只勾选了2个功能,他们这边还有很多其他功能,暂时用不到,就不选了.好了,点击"确认",一个应用就弄好了,下面就尝试着写代码发短信吧. 容联为开发者提供了免费测试功能,但一个号码基本不会超过

使用聚合数据API查询快递数据-短信验证码-企业核名

有位朋友让我给他新开的网站帮忙做几个小功能,如下: 输入快递公司.快递单号,查询出这个快件的所有动态(从哪里出发,到了哪里) 在注册.登录等场景下的手机验证码(要求有一定的防刷策略) 通过输入公司名的关键词,查看这个公司是否已经注册.法人信息.有类似名称的公司等等 并且可以用的接口.文档都提供给我了.其中需求 1.2,都通过 聚合数据 这家网站提供的接口实现:需求 3 通过 云聚数据 来实现. 本项目的文件 因为朋友的网站是用 ThinkPHP 写的,为了保持将来代码的兼容,这三个功能也用 Th

重构客户注册-基于ActiveMQ实现短信验证码生产者

重构目标:将bos_fore项目中的CustomerAction作为短信消息生产者,将消息发给ActiveMQ,创建一个单独的SMS项目,作为短信息的消费者,从ActiveMQ获取短信消息,调用第三方接口完成短信发送. CustomerAction完整代码: 1 @ParentPackage("json-default") 2 @Namespace("/") 3 @Controller 4 @Scope("prototype") 5 public

Springboot使用session容器存取短信验证码

Springboot使用session容器存取短信验证码,(手抖挖了坑在@WebListener类声明时候加了个abstract导致springboot扫描不到这个监听器) 需求:为了给app做接口,在session中存取短信验证码,接口速速撸好swagger测试从session中拿短信验证码信息66的没问题(因为在浏览器范围访问,访问的时候请求头自动带着sessionid的所以没问题),当用postman测试拿到的session内容是null(原因是像手机app或者postman请求时候并没有