在使用PHP開發網站登錄程序的時候經常需要設置一個限制,某個IP的用戶登陸超過一定限制,就鎖定登陸多少分鐘或者小時,也就是如果輸入密碼登陸出錯達到一定次數就不讓再嘗試登陸,這樣可以防止密碼被暴力破解。
現在先看看程序
登錄頁面login.php
<?phpsession_start();ini_set('session.gc_maxlifetime', 300); //設置SESSION過期時間$ip = getIp();if($_SESSION[$ip] < 3){if(isset($_POST['password']) && $_POST['password'] == '123456'){ $_SESSION['ok'] = 1; $_SESSION[$ip] = 0;//登錄成功,IP登錄次數歸零 header('location:?');}if(!isset($_SESSION['ok'])){ $_SESSION[$ip] = $_SESSION[$ip] + 1;//累積登錄錯誤次數 exit(' <form method="post"> password:<input type="password" name="password" /> <input type="submit" value="login" /> </form> ');}// cookie保存session_id用于跨頁面傳遞讀取sessin $lifeTime = 1800; setcookie(session_id, session_id(), time() + $lifeTime, "/"); }else{exit( '你已經輸錯3次密碼,請等5分鐘再試試');}//獲取用戶真實IPfunction getIp(){ $onlineip=''; if(getenv('HTTP_CLIENT_IP')&&strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown')){ $onlineip=getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR')&&strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown')){ $onlineip=getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR')&&strcasecmp(getenv('REMOTE_ADDR'),'unknown')){ $onlineip=getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')){ $onlineip=$_SERVER['REMOTE_ADDR']; } return $onlineip; } ?>
其他頁面獲取登陸狀態,可以用
<?php session_id($_COOKIE['session_id']);session_start();if ($_SESSION['ok'] != 1; ) { header("Location: login.php"); exit(); } ?>
完成。
以上就是PHP設置登陸限制 PHP登陸多少次錯誤鎖定賬戶5分鐘 IP密碼錯誤超限封停的全部內容,希望對大家的學習和解決疑問有所幫助,也希望大家多多支持武林網。
|
新聞熱點
疑難解答