原因分析:輸入正確賬號登錄時,系統記錄了賬號ID,驗證失敗未清除該賬號,導致系統連續驗證造成死循環。
解決方案:在CommonAction.class.php(_initialize)加入驗證失敗時清除當前登錄賬號代碼即可。
if(isset($_SESSION[C('USER_AUTH_KEY')])) {
unset($_SESSION[C('USER_AUTH_KEY')]);
unset($_SESSION);
session_destroy();
}
修改後代碼如下:
function _initialize() {
import('@.ORG.Util.Cookie');
// 用戶權限檢查
if (C ( 'USER_AUTH_ON' ) && !in_array(MODULE_NAME,explode(',',C('NOT_AUTH_MODULE')))) {
import('@.ORG.Util.RBAC');
// dump($_SESSION['_ACCESS_LIST']);
if (! RBAC::AccessDecision ()) {
//檢查認證識別號
if (! $_SESSION [C ( 'USER_AUTH_KEY' )]) {
if ($this->isAjax()){
$this->ajaxReturn(true, "", 301);
} else {
//跳轉到認證網關
redirect ( PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );
}
}
// 沒有權限 拋出錯誤
if (C ( 'RBAC_ERROR_PAGE' )) {
// 定義權限錯誤頁面
redirect ( C ( 'RBAC_ERROR_PAGE' ) );
} else {
if (C ( 'GUEST_AUTH_ON' )) {
$this->assign ( 'jumpUrl', PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );
}
// 提示錯誤信息
if(isset($_SESSION[C('USER_AUTH_KEY')])) {
unset($_SESSION[C('USER_AUTH_KEY')]);
unset($_SESSION);
session_destroy();
}
$this->error( L ( '_VALID_ACCESS_' ) );
}
}
}
}