PHP 限制登录次数是一种安全措施,用于防止恶意用户通过暴力破解密码的方式尝试登录系统。通过设置登录尝试的次数上限,可以在一定时间内阻止攻击者继续尝试。
以下是一个基于账户的 PHP 登录次数限制示例:
<?php
session_start();
// 数据库连接(假设使用 MySQL)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 获取当前登录尝试次数
$user_id = $_SESSION['user_id'] ?? null;
if ($user_id) {
$sql = "SELECT login_attempts FROM users WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $user_id);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
$login_attempts = $row['login_attempts'] ?? 0;
} else {
$login_attempts = 0;
}
// 检查登录尝试次数是否超过限制
$max_attempts = 5;
if ($login_attempts >= $max_attempts) {
echo "登录尝试次数过多,请稍后再试。";
exit();
}
// 处理登录逻辑
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];
// 验证用户名和密码
$sql = "SELECT * FROM users WHERE username = ? AND password = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
if ($user) {
$_SESSION['user_id'] = $user['id'];
// 重置登录尝试次数
$sql = "UPDATE users SET login_attempts = 0 WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $user['id']);
$stmt->execute();
echo "登录成功!";
} else {
// 增加登录尝试次数
$login_attempts++;
$sql = "UPDATE users SET login_attempts = ? WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ii", $login_attempts, $user_id);
$stmt->execute();
echo "用户名或密码错误。";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="post" action="">
<label for="username">Username:</label>
<input type="text" name="username" id="username"><br><br>
<label for="password">Password:</label>
<input type="password" name="password" id="password"><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
通过以上方法,可以有效地实现 PHP 登录次数限制,提高系统的安全性。
领取专属 10元无门槛券
手把手带您无忧上云