讨论数量:
同一用户(IP,手机号,session_id),一定时间内次数限制。
但一定要考虑并发,不然白搭。
$mobile = trim(input('mobile'));
$fp = fopen("./locksms{$mobile}.txt", "w+");//乞丐版的并发限制,用文件锁实现
if (flock($fp, LOCK_EX)) {
$ip = $this->request->ip();
$today = date('Y-m-d 00:00:00');
$log_ip_today = db('sms_log')->where(['ip' => $ip])->where('create_time', '>', $today)->count();
$log_mobile_today = db('sms_log')->where(['mobile' => $mobile])->where('create_time', '>', $today)->count();
if ($log_ip_today > 10 || $log_mobile_today > 10) {
flock($fp, LOCK_UN);
fclose($fp);
return json(['code' => 0, 'msg' => '你今天发送过多的验证码']);
}
$seconds_ago = date('Y-m-d H:i:s', time() - 60); //同一手机号发送验证码至少间隔一分钟
$last = db('sms_log')->where(['mobile' => $mobile])->where('create_time', '>=', $seconds_ago)->count();
if ($last > 0) {
flock($fp, LOCK_UN);
fclose($fp);
return json(['code' => 0, 'msg' => '验证码发送过于频繁']);
}
//发送短信,,,
//成功后把发送记录写入数据表`sms_log`中
}
else {
return json(['code' => 0, 'msg' => '请重试']);
}
推荐文章: