使用者的鎖定

2021-07-30 05:19:21 字數 3214 閱讀 8890

之前由於做乙個小專案的需要,做乙個使用者登入密碼輸錯幾次之後被鎖定。但是本人還覺得還有瑕疵,就是在連續輸錯幾次之後被鎖定,但是目前實現的是時間上不連續錯誤幾次就被鎖定!

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 為使用者解鎖...