如果是在局域網內有很多人去登陸論壇,因為出口 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
的操作了。