美文网首页
redis限制验证码发送次数和间隔

redis限制验证码发送次数和间隔

作者: 江河湖海琴瑟琵琶 | 来源:发表于2020-11-16 15:46 被阅读0次

    要求.
    每个手机号每天最多发送10条验证码
    每两条验证码间隔需要大于60秒
    思路.
    调用发送验证码接口时,以前缀+当前日期+手机号 为键.
    sendVerify:20201014:18920144444
    值需要记录上次发送的时间和发送次数
    [ 'recently_send_time'=>time(), 'send_time'=>1 ]
    并设置过期时间24小时

    
        /**
         * 是否拦截短信发送,基于redis实现
         * @param $tel string 手机号
         * @param $max int 每天发送次数
         * @param $interval int 发送间隔s
         *
         * @return bool|string
         */
        private function isInterceptSend($tel,$max,$interval){
            $date = date('Ymd',time());
            $REDIS_KEY = "sendVerify:$date:$tel";
            $REDIS_VALUE = S($REDIS_KEY);
    
            //第一次,保存发送时间和发送次数
            if (!$REDIS_VALUE)
            {
                S($REDIS_KEY,['recently_send_time'=>time(),'send_times'=>1],24*3600);
                return false;
            }
    
            //判断两次发送时间间隔
            if( time() - $REDIS_VALUE['recently_send_time'] < $interval )
            {
                return "发送间隔$interval 秒";
            }
    
            //判断发送次数
            if ( $REDIS_VALUE['send_times'] >= $max )
            {
                return "验证码发送次数过多";
            }
    
            //更新发送时间,次数+1,(重新设置过期时间,否则会变成永不失效)
            S($REDIS_KEY,['recently_send_time'=>time(),'send_times'=> ($REDIS_VALUE['send_times'] + 1)],24*3600);
            return false;
        }
    

    相关文章

      网友评论

          本文标题:redis限制验证码发送次数和间隔

          本文链接:https://www.haomeiwen.com/subject/pnxzbktx.html