PHP Forma 表单 登录失败次数限制与锁定机制

PHP Forma阿木 发布于 7 天前 3 次阅读


PHP 表单登录失败次数限制与锁定机制实现

在Web开发中,用户登录是常见的需求。为了提高网站的安全性,防止恶意用户通过暴力破解等方式非法登录,实现登录失败次数限制与锁定机制是非常必要的。本文将围绕PHP表单登录,详细介绍如何实现登录失败次数限制与锁定机制。

1. 前言

登录失败次数限制与锁定机制的主要目的是防止恶意用户通过不断尝试密码来非法登录系统。以下是实现该机制的基本思路:

1. 记录用户登录尝试的次数。
2. 当用户连续登录失败达到一定次数时,锁定用户账号一段时间。
3. 在锁定时间内,用户无法再次尝试登录。

2. 数据库设计

为了实现登录失败次数限制与锁定机制,我们需要在数据库中增加以下字段:

- `login_attempts`:记录用户登录尝试的次数。
- `lock_time`:记录用户账号被锁定的结束时间。

以下是一个简单的数据库表结构示例:

sql
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
`login_attempts` int(11) NOT NULL DEFAULT '0',
`lock_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3. PHP代码实现

3.1 用户登录表单

我们需要创建一个用户登录表单,如下所示:

html

用户名:

密码:

登录

3.2 登录处理逻辑

在`login.php`文件中,我们需要处理用户登录请求,并实现登录失败次数限制与锁定机制。

php
connect_error) {
die("连接失败: " . $mysqli->connect_error);
}

// 获取用户名和密码
$username = $_POST['username'];
$password = $_POST['password'];

// 查询用户信息
$result = $mysqli->query("SELECT FROM user WHERE username='$username'");

if ($result->num_rows > 0) {
$user = $result->fetch_assoc();

// 检查用户是否被锁定
if ($user['lock_time'] && $user['lock_time'] > date('Y-m-d H:i:s')) {
echo "账号已被锁定,请稍后再试。";
exit;
}

// 验证密码
if (password_verify($password, $user['password'])) {
// 密码正确,重置登录尝试次数
$mysqli->query("UPDATE user SET login_attempts=0, lock_time=NULL WHERE username='$username'");

// 登录成功,设置session
$_SESSION['username'] = $username;
echo "登录成功!";
} else {
// 密码错误,增加登录尝试次数
$login_attempts = $user['login_attempts'] + 1;
$lock_time = date('Y-m-d H:i:s', strtotime('+5 minutes')); // 锁定5分钟

$mysqli->query("UPDATE user SET login_attempts=$login_attempts, lock_time='$lock_time' WHERE username='$username'");

if ($login_attempts >= 3) {
echo "连续登录失败3次,账号已被锁定5分钟。";
} else {
echo "密码错误,您还有" . (3 - $login_attempts) . "次机会。";
}
}
} else {
echo "用户名不存在。";
}

$mysqli->close();
?>

3.3 登录页面

在登录页面,我们可以添加一个提示信息,告知用户登录失败次数限制与锁定机制:

html

用户名:

密码:

登录

在`login.php`文件中,我们可以添加以下JavaScript代码,用于显示登录提示信息:

javascript
document.getElementById('login-message').innerHTML = '连续登录失败3次,账号将被锁定5分钟。';

4. 总结

本文详细介绍了如何使用PHP实现表单登录失败次数限制与锁定机制。通过在数据库中记录登录尝试次数和锁定时间,我们可以有效地防止恶意用户通过暴力破解等方式非法登录系统。在实际应用中,可以根据需求调整锁定时间和登录尝试次数限制,以提高网站的安全性。