前端及PHP限制用户在一段时间内提交的次数

34 篇文章 0 订阅
23 篇文章 1 订阅

前端代码:

<form action="" method="post">
            <div class="form-group has-feedback">
                <input type="text" class="form-control" name="name" placeholder="用户名" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" required>
                <span class="glyphicon glyphicon-user form-control-feedback"></span>
            </div>
            <div class="form-group has-feedback">
                <input type="password" class="form-control" name="pass" οnkeyup="value=value.replace(/[\u4E00-\u9FA5]/g,'')" minlength="6" maxlength="16" placeholder="密码" required>
                <span class="glyphicon glyphicon-lock form-control-feedback"></span>
            </div>
            
            <div class="row">
                <!-- /.col -->
                <div class="col-xs-12">
                    <button type="submit" class="btn btn-primary btn-block btn-flat">登录</button>
                </div>
                <!-- /.col -->
            </div>
        </form>

JS代码:

<!-- 获取IP -->
<script>var returnCitySN = '';</script>
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script>
    var ipstr = returnCitySN["cip"]; //ip地址
    var ipaddr = returnCitySN["cname"];//IP城市
    $(function () {
        $("form").on("submit",function () {
            $(".btn").attr("disabled",'disabled');  //在用户提交时将按钮设置为禁止状态
            if($("input[name='captcha']").val().length < 4){
                layer.msg("请输入四位验证码!");
                //定时器
                isClick();
                return false;
            }
            var form = $('form').serializeArray();
            form.push({'name':'re_type','value':1},{'name':'ip','value':ipstr},{'name':'ipaddr','value':ipaddr});
            $.ajax({
                url:'login',
                type:'post',
                data:form,
                success:function (data) {
                    if (data.status == 0) {
                        window.location.href = '/AuthBase.Index/index';
                    } else {
                        layer.msg(data.msg);
                        $("#captcha").attr("src","{:captcha_src()}?"+Math.random())
                        //定时器
                        isClick(data.data);
                    }
                },
                error:function (error) {
                    layer.msg(error);
                    isClick();
                }
            },'json');
            return false;
        });
    });
//使用定时器恢复按钮的点击状态
    function isClick(time = 5000) {
        //定时器
        setTimeout(function(){
            $(".btn").removeAttr("disabled");
        }, time);
    }
</script>

PHP端代码:

1、以用户及分钟为键写入IP

2、写入session,并计算次数

$name     = $this->request->param('name/s','');   //账号
            $pass    = $this->request->param('pass/s','');  //密码
            $ip      = $this->request->param('ip/s',''); //ip
            $ip_addr = $this->request->param('ipaddr/s','');//ip地址

            //参数验证
            if(empty($name) || empty($pass) || empty($captcha))
                return $this->retError('300','参数中有空值!');
            $time = time();
            if($time - MemCache::get($ip.'_'.$name) == 1)
                return $this->retError('300','您提交的太频繁了~');
            else{
//如果用户提交的间隔大于1秒,则将IP写入session中
                $_SESSION[$name][date('YmdH:i',$time)][] = $ip;
                MemCache::set($ip.'_'.$name,$time);
            }

            if(isset($_SESSION[$name][date('YmdH:i',$time)]) && count($_SESSION[$name][date('YmdH:i',$time)]) >= 5){
                return $this->retError('300','一分钟内只允许提交5次~',60000);
            }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值