优化Discuz! X1.5用户登录失败5次后显示验证码框

准备对Discuz! X1.5的用户登录部分做一点小优化,实现当用户登录失败5次,或相应次数后,显示验证码输入框,而不是discuz默认的需要等待15分钟后再次登录。这样一来,不仅能起到防灌水的效果,而且也不会对用户造成一种无形的压力!

首先修改用户登录错误次数的记录,找到文件 source/function/function_member.php 中的logincheck()函数,代码如下:

function logincheck() {
global $_G;
$return = 0;
$login = DB::fetch_first("SELECT count, lastupdate FROM ".DB::table('common_failedlogin')." WHERE ip='$_G[clientip]'");
$return = (!$login || (TIMESTAMP - $login['lastupdate'] > 900)) ? 4 : max(0, 5 - $login['count']);

if(!$login) {
DB::query("REPLACE INTO ".DB::table('common_failedlogin')." (ip, count, lastupdate) VALUES ('$_G[clientip]', '1', '$_G[timestamp]')");
} elseif(TIMESTAMP - $login['lastupdate'] > 900) {
DB::query("REPLACE INTO ".DB::table('common_failedlogin')." (ip, count, lastupdate) VALUES ('$_G[clientip]', '1', '$_G[timestamp]')");
DB::query("DELETE FROM ".DB::table('common_failedlogin')." WHERE lastupdate<$_G[timestamp]-901", 'UNBUFFERED');
}
return $return;
}

持续修改ing