借助 Rides 實(shí)現(xiàn)輸入密碼錯(cuò)誤限制次數(shù)
限制時(shí)間為1天(86400s);
-
一小時(shí)內(nèi)錯(cuò)誤次數(shù)>=6;
key => user_no:AD576dfdcc650e0password_error_count value => 1530862696:1
驗(yàn)證密碼前邏輯
function passwordErrorCount($userNo)
{
$redisHost = '127.0.0.1';
$redisProt = 6379;
$redisPwd = 'password';
$redis = new Redis();
$redis->connect($redisHost, $redisProt);
$redis->auth($redisPwd);
$key = 'userNo:' . $userNo . 'password_error_count';
list($time, $count) = explode(':', $redis->get($key));
$ban = $time + 86400;
$result = [
'status' => true,
'message' => "無(wú)限制"
];
if (time() <= $ban && $count >= 6) {
$result = [
'status' => false,
'message' => "登錄失敗", "登錄操作被限制盼忌,請(qǐng)?jiān)? . date('Y-m-d H:i:s', $ban) . "后重試"
];
}
return $result;
}
驗(yàn)證密碼
function auth()
{
$user_no = 'U-test';
$pwd = '123456';
$result = passwordErrorCount($user_no);
// 判斷是否有登錄限制
if($result['status'] === false){
$message = $result['message'];
}elseif ($pwd === '******') {
$message = '登錄成功';
}else{
$message = '密碼錯(cuò)誤';
restrict($user_no);
}
}
輸入密碼錯(cuò)誤后邏輯
function restrict($userNo)
{
$redisHost = '127.0.0.1';
$redisProt = 6379;
$redisPwd = 'password';
$redis = new Redis();
$redis->connect($redisHost, $redisProt);
$redis->auth($redisPwd);
$key = 'userNo:' . $userNo . 'password_error_count';
list($time, $count) = explode(':', $redis->get($key));
// 判斷是否在一小時(shí)內(nèi)多次出錯(cuò)
$value = implode(':', array(time(), 1));
if (date('YmdH', $time) === date('YmdH', time())) {
$value = implode(':', array(time(), $count + 1));
}
$redis->set($key, $value);
}
注
在寫的過(guò)程中寫了幾個(gè)if嵌套感覺(jué)比較惡心.也不會(huì)優(yōu)化,向有經(jīng)驗(yàn)的大佬請(qǐng)教略有收獲.
-
慢慢鍛煉,加強(qiáng)自己的思維.
// 自己寫的 // 判斷是否有登錄限制 if ($result['status'] === true) { // 判斷密碼是否正確 if ($pwd === '*****') { $message = '登錄成功'; } else { $message = '密碼錯(cuò)誤'; restrict($user_no); } } else { $message = $result['message']; }
// 請(qǐng)教后寫的 // 判斷是否有登錄限制 if($result['status'] === false){ $message = $result['message']; }elseif ($pwd === '******') { $message = '登錄成功'; }else{ $message = '密碼錯(cuò)誤'; restrict($user_no); }
- 沒(méi)有了嵌套,看起來(lái)也清晰了很多
- 因?yàn)樽詈竺艽a失敗要調(diào)用一個(gè)方法,所以
else
很有必要
如果沒(méi)有調(diào)用方法,可以提前賦值:
// 判斷是否有登錄限制
$message = '密碼錯(cuò)誤';
if($result['status'] === false){
$message = $result['message'];
}elseif ($pwd === '******') {
$message = '登錄成功';
}