【发布时间】:2015-08-26 12:54:02
【问题描述】:
如何在 3 次登录尝试后阻止用户并将其存储到数据库?我已经在用户表中添加了两列,一列用于登录尝试次数,第二列用于上次登录的日期时间。请帮助我,如何做到这一点。我不擅长 PHP。
谢谢
这是我的 login.php
session_start();
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
$loginDate = date("Y-m-d H:i:s");
$Error ="";
$successMessage ="";
if (isset($_POST['submit'])){
if ( !( $_POST['cnumber'] == "" && $_POST['password'] == "")){
$cnumber=$_POST['cnumber'];
$password= sha1($_POST['password']);
$cnumber = filter_var($cnumber, FILTER_SANITIZE_NUMBER_INT);
if (filter_var($cnumber, FILTER_VALIDATE_INT)){
$con=mysqli_connect("localhost","root","","users");
$result = mysqli_query($con, "SELECT * FROM users WHERE contractNumber='$cnumber' AND password='$password'");
$data = mysqli_num_rows($result);
if($data==1){
$_SESSION['login_user']=$cnumber;
mysqli_query($con, "INSERT INTO `users`.`logs`(`contractNumber`, `lastLogin`, `ipAddress`) VALUES ('$cnumber', '$loginDate', '$ipaddress')");
header('Location: profile.php');
} else {
$Error ="Invalid Contract Number or Password.";
mysqli_query($con, "UPDATE users SET loginAttempt = loginAttempt + 1 WHERE contractNumber = '$cnumber' ");
print_r(mysqli_affected_rows($con));
}
mysqli_close($con);
} else {
$Error ="Invalid Contract Number.";
}
} else {
$Error ="Contract Number or Password is Empty.";
}
}
【问题讨论】:
-
存储会话中的登录尝试次数。传递该值后,不再显示登录表单...替代/另外,一旦会话超过限制,请取消验证他们在数据库中的帐户并要求他们联系管理员进行访问。
-
@chris85 怎么做?我不擅长 php。你能帮我解决这个问题吗?
-
不要在会话中存储尝试次数。然后机器人可以忽略会话 cookie 并继续尝试而不会被阻止。通过 IP 地址或联系电话将失败的登录尝试存储在数据库中(取决于您是否要锁定帐户或 IP 地址)。
-
@drew010 我不知道该怎么做。你能帮助我吗?请
-
@drew010 的想法是更好的选择。这是一个较旧的线程,webcheatsheet.com/php/blocking_system_access.php。不要使用他们正在使用的
mysql_函数,继续使用您的mysqli_。
标签: php login login-script login-attempts