可能重复:
在 PHP 中限制用户登录尝试
在 3 次登录尝试失败后,我试图在登录中设置一些安全性以阻止用户访问。例如,如果特定用户尝试使用错误的用户名或密码登录 3 次,我应该显示该用户需要在 10 分钟后重试的对话框或消息(例如)
10分钟后,用户可以使用正确的用户名和密码再次登录。
我怎么做?
可能重复:
在 PHP 中限制用户登录尝试
在 3 次登录尝试失败后,我试图在登录中设置一些安全性以阻止用户访问。例如,如果特定用户尝试使用错误的用户名或密码登录 3 次,我应该显示该用户需要在 10 分钟后重试的对话框或消息(例如)
10分钟后,用户可以使用正确的用户名和密码再次登录。
我怎么做?
最简单的方法是使用 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 存储在数据库中。
您可以使用$_SESSION
var 保存尝试次数和尝试的时间。只有当用户仍然有相同的会话(例如,没有关闭浏览器)时,这才有效。如果您希望它持续存在,请使用 cookie。如果您不希望用户能够避免这种情况,请使用 IP 的 db 值,但如果它是 NAT 等,这将是一个问题。$_SESSION
您可能希望在使用var记录 3 次尝试失败后阻止 IP
在我看来,Cookie 或 Session 也可以解决您的问题,但在我看来,这些方法并不完美,特别是如果您专注于安全。如果用户清除 cookie 会发生什么?