前端及PHP限制用戶在一段時間內提交的次數

前端代碼:

<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);
            }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章