前端代碼:
<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);
}