如何在3次登录失败后几分钟阻止登录

时间:2012-12-26 03:57:10

标签: php security login

  

可能重复:
  Limiting user login attempts in PHP

我试图在登录失败后尝试在登录时设置一些安全措施以阻止用户访问。 例如,如果特定用户尝试使用错误的用户名或密码登录3次,我应该显示用户在10分钟后需要再次尝试的对话框或消息(作为示例)

比10分钟后,用户可以使用正确的用户名和密码再次登录。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用SESSION存储失败登录次数,每次用户登录时使用错误的用户名或密码,都会增加计数。就像那样:

if(isset($_SESSION['num_login_fail']))
{
  if($_SESSION['num_login_fail'] == 3)
   {
     if(time() - $_SESSION['last_login_time'] < 10*60*60 ) 
      {
         // alert to user wait for 10 minutes afer
          return; 
      }
      else
      {
        //after 10 minutes
         $_SESSION['num_login_fail'] = 0;
      }
   }      
}

$sucess = doLogin() // your check login function
if($success)
{
   $_SESSION['num_login_fail'] = 0;
   //your code here
}
else
{
 $_SESSION['num_login_fail'] ++;
 $_SESSION['last_login_time'] = time();
}

但是,用户可以通过关闭浏览器来绕过它,然后再次打开,所有用户的会话都将为空。为了更完美,您可以在数据库中存储num_login_fail和last_login_time。

答案 1 :(得分:0)

您可以使用$_SESSION var来保存尝试时间的尝试次数。这仅在用户仍具有相同会话时才起作用(例如,没有关闭浏览器)。如果您希望cookie保持不变,请使用cookie。如果您不希望用户能够避免这种情况,请使用IP的db值,但如果它是NAT等,这将是一个问题。您可能希望在使用$_SESSION var

记录3次尝试失败后阻止IP

答案 2 :(得分:0)

在我看来,Cookie或Session也可以解决你的问题,但在我看来,这些方法并不完美,特别是如果你专注于安全。如果用户清除cookie会发生什么?