*************************************************
** 本教程基于版本:Discuz! X 2.0 **
*************************************************
在Discuz! / Discuz! X 之前的版本中,大家总是能碰到一个提示,就是密码错误次数过多,需要等 15 分钟才能登陆的情况。
如果是在局域网内有很多人去登陆论坛,因为出口 IP 是一个,这种情况会更多的发生。
因为在之前的版本中,这里的记录是会记录某个 IP 登陆错误的次数,超过 15 分钟后就会导致这个情况发生。
在 X2.0 版本中,这里做了调整,不在只针对 IP 做错误限制,会同时记录输入错误密码时所使用的用户名。
X2.0 的用户登陆相关的处理在 /soucr/class/class_member.php 文件中
登陆时候,我们调用的是该类中的 on_login 方法:
在该方法中会做登陆相关的处理,在这个方法的后面,有一行代码:
- loginfailed($_G['gp_username']);
复制代码
其中 loginfailed 函数在 /source/function/function_member.php 中
我们看到这个函数是:
- function loginfailed($username) {
- global $_G;
- $username = addslashes(trim(stripslashes($username)));
- DB::query("UPDATE ".DB::table('common_failedlogin')." SET count=count+1, lastupdate='$_G[timestamp]' WHERE ip='$_G[clientip]' AND username='$username'");
- }
复制代码
这个函数会把错误记录到表 pre_common_failedlogin 中,如果我们再次遇到某个用户登陆错误次数过多导致需要等 15 分钟才能登陆时,需要手动清表信息的时候,可以在这里根据 username 字段删除其登陆错误记录即可,而不在需要之前直接清空 整个 IP 的操作了。
|