之前由於做乙個小專案的需要,做乙個使用者登入密碼輸錯幾次之後被鎖定。但是本人還覺得還有瑕疵,就是在連續輸錯幾次之後被鎖定,但是目前實現的是時間上不連續錯誤幾次就被鎖定!
model類中的**
class
usermodel
extends
model
}// 處理登入
public
function
signin
()
//檢查使用者最近30分鐘密碼錯誤次數
$res = $this->checkpasswrongtime($userinfo['id']);
if(!$res)
$bool = password_verify($data['userpassword'], $userinfo['password']);
if(!$bool)else
if( $data['online']==1 )
} //這個方法是用來檢驗使用者近30 分鐘錯誤的次數
public
function
checkpasswrongtime
($uid, $min=30, $wtime =4)
$time = time();//當前時間
$prevtime = time() - $min*60;
//使用者登入ip
$ip = -ip2long( $_server['remote_addr'] ) ;
$map['uid'] = $uid;
$map['pass_wrong_time_status'] =2;//表示錯誤的
$map['ipaddr'] = $ip;
$map['longintime'] = array( 'between', $prevtime, $time );
$worngdata = m('user_lock')->field('id,uid,ipaddr,logintime,pass_wrong_time_status')->where($map)->select();
//錯誤次數的統計
$worngtimes = count($worngdata);
// 判斷錯誤次數是否超過了限制次數
if( $worngtimes > $wtime )
return
false;
}else
}//這個方法是用來記錄密碼錯誤的次數的
protected
function
recordpasswrongtime
($uid)
}controller中**
class publiccontroller extends controller
else if(is_post)
//先判斷驗證碼是否正確
$bool = $this->checkcode( i('post.code') );
if (!$bool )
$res = d('user')->signin();
if ( $res==1 ) else if($res==3)else if($res==2)else if($res==30)}}
public function makecode()
public function checkcode($code)
else
}
//這個方法負責ajax驗證碼的驗證
public function checkajaxverify()
else
}// 這個方法負責ajax驗證
public function ajaxcheckuser()
else if(is_ajax)else}}
// 這個方法負責退出
public function signout()
}
資料庫的設計
--使用者鎖定表mgj_user_lock ipaddr位
create
table mgj_user_lock(
id int unsigned auto_increment primary
key,
uid int unsigned not
null,
ipaddr int
notnull,
logintime int
notnull
default
0 p comment '使用者登陸時間',
pass_wrong_time_status tinyint(10) not
null comment '登陸密碼錯誤狀態1 啟用 2禁用 '
)engine = innodb default charset= utf8;
alter
table mgj_user_lock modify ipaddr int
notnull;
alter
table mgj_user_lock modify logintime int
notnull
default
0;
--commit"管理員表"status 為1啟用,2禁用
create
table mgj_administrators(
id int unsigned auto_increment primary
key,
username varchar(32) not
null,
password varchar(100) not
null,
status tinyint(1) unsigned default
1, pic varchar(50) not
null,
email varchar(100) not
null,
addtime int
notnull
)engine=innodb default charset =utf8;
alter
table mgj_administrators add
unique(`username`);
alter
table mgj_administrators modify password varchar(100) not
null;
oracle scott 使用者鎖定
原因 預設oracle10g的scott不能登陸。解決 1 conn sys sys as sysdba 以dba的身份登入 2 alter user scott account unlock 然後解鎖 3 conn scott tiger 彈出乙個修改密碼的對話方塊,修改一下密碼就可以了 具體操作...
Oracle使用者鎖定
今天登陸oracle的使用者報錯使用者被鎖定如圖 查詢使用者被鎖定的時間 select username,lock date from dba users where username test 複製 查詢鎖定使用者的狀態 select u.username,u.account status,t.l...
Oracle system使用者被鎖定
問題情境 在多次輸入system錯誤密碼之後,會被提示,當前使用者被鎖定。甚至於更囧的是,連sys等其他使用者的密碼也記不得了。解決思路 先解鎖,再為使用者重新設定密碼。具體實現 1 以sysdba身份登入,不需要提供使用者名稱和密碼,此sql深得我心。conn as sysdba 2 為使用者解鎖...