-2

可能重复:
在 PHP 中限制用户登录尝试

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

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

我怎么做?

4

3 回答 3

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 存储在数据库中。

于 2012-12-26T04:08:46.237 回答
0

您可以使用$_SESSIONvar 保存尝试次数和尝试的时间。只有当用户仍然有相同的会话(例如,没有关闭浏览器)时,这才有效。如果您希望它持续存在,请使用 cookie。如果您不希望用户能够避免这种情况,请使用 IP 的 db 值,但如果它是 NAT 等,这将是一个问题。$_SESSION您可能希望在使用var记录 3 次尝试失败后阻止 IP

于 2012-12-26T04:00:26.570 回答
0

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

于 2012-12-26T04:12:55.907 回答