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