PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
在本篇文章中,我们将通过一个完整的PHP登录验证示例来介绍如何实现一个完整的登录系统。本文将介绍如何验证用户名和密码,如何使用验证码来避免暴力破解,如何在数据库中存储用户信息,如何实现已登录用户的验证,以及自动登录和注销登录等功能。
1. 验证用户名和密码
首先,我们要实现的是验证用户名和密码的功能。当用户输入用户名和密码时,我们需要将其与数据库中存储的数据进行比对,从而进行登录验证。在本例中,我们可以使用以下代码来实现验证功能。
if(isset($_POST["username"]) && isset($_POST["password"])){
$username = $_POST["username"];
$password = $_POST["password"];
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result) > 0){
//登录成功
} else{
//登录失败
}
}
稍微解析一下这段代码:
- 首先,我们使用isset()函数来检查是否已经提交了表单中的用户名和密码。
- 然后,我们将用户名和密码赋值给变量。
- 接下来,我们使用SQL语句从数据库中查询与输入的用户名和密码匹配的记录。
- 如果查询结果有记录,则表示用户已经使用了正确的用户名和密码进行登录,我们可以采取一些措施,如将用户引导到他们想要进入的页面。
- 否则,用户名和密码无效,我们可以采取相应的措施,例如提供一条错误消息。
2. 使用验证码
为了防止黑客使用暴力破解方法来破解用户的密码,我们可以使用验证码来识别来自真正用户的登录尝试。在本例中,我们将使用PHP内置的GD库来生成图像验证码,并将其嵌入到网站的登录页面中。
<!-- 在表单中添加一个验证码输入框和一个验证码图片 --> <label>验证码:</label> <input name="captcha_code" type="text"> <img src="captcha.php">
在上面的代码中,我们首先在表单中添加了一个输入框,用于输入验证码,然后将验证码图像包含在页面中。
接下来,我们可以使用以下代码来生成验证码:
<?php
session_start();
//创建一个随机数种子
$seed = str_split('abcdefghijklmnopqrstuvwxyz0123456789');
shuffle($seed);
//从随机数种子中选择4个字符并将它们合并为一个字符串
$captcha_code = '';
foreach (array_rand($seed, 4) as $k) $captcha_code .= $seed[$k];
//将验证码字符串存储到session中
$_SESSION['captcha'] = $captcha_code;
//创建一个宽度为100,高度为30像素的图像
$image = imagecreate(100, 30);
//生成随机的RGB颜色
$bg_color = imagecolorallocate($image, rand(200, 255), rand(200, 255), rand(200, 255));
$text_color = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $bg_color);
//在图像上写入验证码
imagestring($image, 5, 25, 5, $captcha_code, $text_color);
//设置HTTP头信息
header('Content-Type: image/png');
//输出图像
imagepng($image);
?>
在上面的代码中,我们首先使用 session_start 函数启用 PHP 会话。然后,创建一个随机字符数组,使用 shuffle 函数来打乱数组,从中选择 4 个字符组成随机的验证码。然后将验证码存储到 Session 变量中。
接下来,我们使用 imagecreate 函数创建一个宽度为 100 像素,高度为 30 像素的图像。然后,分配背景色和文本颜色,并使用 imagestring 函数将生成的验证码写入图像。
最后,我们设置 HTTP 头信息和输出生成的图像。
3. 在数据库中存储用户信息
为了实现用户登录的持久化,我们需要在数据库中存储用户的信息,包括用户名、密码和其他必要的数据。在本例中,我们将用户信息存储在一个名为“users”的表中。
以下是一个名为“users”的简单数据库表:
CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(50) NOT NULL,
password varchar(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在上面的代码中,我们创建了一个包含“id”(自增)、“username”和“password”字段的表。
我们可以使用以下代码将用户信息插入到 users 数据库表中:
//插入新用户
$sql = "INSERT INTO users (username, password) VALUES ('$username', '$password')";
if(mysqli_query($conn, $sql)){
echo "用户创建成功";
} else{
echo "创建用户时出现了问题" . mysqli_error($conn);
}
4. 已登录用户验证
一旦用户登录成功,我们需要确保他们确实是已经登录的。可以实现这一功能的一种技术被称为“会话管理”。
会话管理是通过将用户的登录状态与 PHP 会话(在服务器端保存的数据)相关联来实现的。用户每次向服务器发出请求时,会话数据都会被检查和更新,以确保用户还处于已登录状态。
以下是在 PHP 中实现会话管理的方法:
- 调用 session_start(),以便启动会话
- 使用 session_id() 函数检索当前 session 的 ID
- 通过 $_SESSION 全局数组存储和检索会话数据
以下是一个示例代码,展示如何在 PHP 中验证已登录用户:
//启动会话
session_start();
//检查会话中是否已经存储了用户ID
if(isset($_SESSION["user_id"])){
//已登录
} else{
//未登录
}
如果用户在 login.php 中输入正确的用户名和密码,则我们可以在数据库中找到与其匹配的行。然后,可以使用以下代码将该用户 ID 存储到会话中:
//在会话中存储用户ID $_SESSION["user_id"] = $row["id"];
5. 自动登录和注销登录
另一个有用的功能是让用户在下一次访问网站时无需再次输入登录信息。可以使用“自动登录”的功能来实现这一点。
在本例中,我们将使用“cookie”来实现自动登录。cookie 是一种存储在用户计算机上的数据,在用户进一步访问网站时可以重用。我们可以使用以下方法来创建一个 cookie:
//创建一个有效期为1天的cookie
setcookie("user_id", $row["id"], time() + (86400), "/");
上面的代码将创建一个名为“user_id”的 cookie,有效期为 1 天。当用户再次访问该网站时,cookie 将被重新发送到服务器,并且我们可以使用以下代码来检索 cookie 值:
if(isset($_COOKIE["user_id"])){
//自动登录
}
最后,让我们来谈谈如何注销登录。注销登录的方法非常简单,只需要删除会话和 cookie 即可:
//删除Session
session_unset();
session_destroy();
//删除Cookie
setcookie("user_id", "", time() - 3600);
在上面的代码中,我们调用 session_unset() 函数,删除会话中存储的所有数据。然后调用 session_destroy() 函数,销毁整个会话。最后,我们调用 setcookie() 函数,将 cookie 过期时间设置为过去的某个时间,从而将其删除。
以上就是本文的 PHP 登
