以下是详细的PHP登录验证功能示例攻略:
1. 创建数据库
首先,在MySQL数据库中,创建一个名为“users”的表格,其中应包含以下列:
- id:主键,整型,自增长
- username:用户名,字符串类型,长度为50
- password:密码,字符串类型,长度为255
创建的SQL代码如下:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2. 创建登录页面
创建一个名为“login.php”的页面,包含以下内容:
- 一个HTML表单,其中应包含以下元素:
- 一个名为“username”的文本框,用于输入用户名
- 一个名为“password”的密码框,用于输入密码
- 一个名为“captcha”的文本框和图片,用于输入验证码
- 一个名为“remember”的复选框,用于记录用户选择的自动登录
- 一个提交按钮
- 一个用于生成验证码的PHP函数
- 一个用于验证用户提交信息的PHP代码块
以下是代码示例:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form action="auth.php" method="post">
<label>Username:</label>
<input type="text" name="username" required>
<br><br>
<label>Password:</label>
<input type="password" name="password" required>
<br><br>
<label>Captcha:</label>
<input type="text" name="captcha" required>
<?php
$cap = generate_captcha();
echo '<img src="' . $cap[0] . '" alt="Captcha" />';
session_start();
$_SESSION['captcha'] = $cap[1];
?>
<br><br>
<label>Remember me:</label>
<input type="checkbox" name="remember">
<br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
<?php
function generate_captcha($length = 6) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$characters_length = strlen($characters);
$random_string = '';
for ($i = 0; $i < $length; $i++) {
$random_string .= $characters[rand(0, $characters_length - 1)];
}
$image = imagecreatefromjpeg('captcha.jpg');
$text_color = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 5, 5, 5, $random_string, $text_color);
ob_start();
imagejpeg($image);
$image_data = ob_get_contents();
ob_end_clean();
return array('data:image/jpeg;base64,' . base64_encode($image_data), $random_string);
}
?>
3. 创建验证页面
创建一个名为“auth.php”的页面,用于验证用户提交的用户名、密码和验证码是否正确,并在验证成功后将用户的信息存储到Session中或者设置自动登录Cookie。此外,为了安全性考虑,需要将用户输入的密码进行加密。
以下是代码示例:
<?php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
$captcha = $_POST['captcha'];
$remember = $_POST['remember'];
$expected_captcha = $_SESSION['captcha'];
if (empty($username) || empty($password) || empty($captcha)) {
die('Please enter all the fields!');
}
if ($captcha != $expected_captcha) {
die('Invalid captcha!');
}
$db = mysqli_connect('localhost', 'root', 'password', 'mydatabase');
$username = mysqli_real_escape_string($db, $username);
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($db, $query);
if (mysqli_num_rows($result) == 0) {
die('Invalid username and password!');
}
$user = mysqli_fetch_assoc($result);
if (!password_verify($password, $user['password'])) {
die('Invalid username and password!');
}
$_SESSION['user_id'] = $user['id'];
if ($remember == 'on') {
$token = bin2hex(random_bytes(16));
setcookie('auth_token', $token, time() + 86400 * 30, '/');
$query = "INSERT INTO auth_tokens (user_id, token) VALUES ('{$user['id']}', '$token')";
mysqli_query($db, $query);
}
header('Location: index.php');
exit;
?>
示例说明1
在第二步生成验证码的PHP函数中,使用了GD库生成一张随机字符串的图片,并将网页上生成的验证码Session储存。在第三步中进行验证时,将用户输入的验证码与Session中储存的验证码进行比对,保证了登录界面的安全性。
示例说明2
在第三步中,使用了bcrypt算法对密码进行加密。bcrypt算法是当前最安全的密码加密算法之一,使用它可以更好地保护用户的隐私。此外,在用户选择自动登录时,生成一个随机的Token作为Cookie,并将Token保存到数据库,从而实现安全的自动登录。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】 - Python技术站