写简单的php登录文件 (你如何写一个简单的php登录文件?)

网站或应用中,登录系统是极其常见的功能,并且是保护用户信息的基础。本篇文章将介绍如何编写一个简单的 PHP 登录文件。

在这个示例中,我们使用 MySQL 数据库存储用户信息。我们将创建一个包含两个表的数据库,一个是用户表,另一个是会话表。用户表将包含用户名和密码,会话表将包含已登录用户的会话信息,以便我们知道每个会话属于哪个用户。

首先,我们需要创建一个数据库并两个表。我们可以使用 MySQL 命令行或 phpMyAdmin 进行创建。

创建用户表:


CREATE TABLE users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(128) NOT NULL
)

创建会话表:


CREATE TABLE sessions (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT(6) UNSIGNED NOT NULL,
token CHAR(64) NOT NULL,
created_at DATETIME NOT NULL
)

接下来,我们将编写 PHP 文件来处理用户登录。

首先,我们需要连接到数据库:

php
<?php
//连接到数据库
$db = mysqli_connect('localhost', 'username', 'password', 'dbname');

然后,我们需要定义处理用户输入的代码。用户将通过 HTML 表单提交他们的用户名和密码。我们需要使用 PHP 从 POST 请求中获取这些值。

php
<?php
//获取提交的用户名和密码
$username = $_POST['username'];
$password = $_POST['password'];

接下来,我们需要使用 SQL 查询来检查该用户名和密码是否对应我们数据库中的一条记录。如果是,则允许用户访问网站,并为他们创建一个新的会话。否则,将向用户显示错误消息。

“`php
<?php
//查询是否有匹配的用户
$query = "SELECT id, password FROM users WHERE username = '$username'";
$result = mysqli_query($db, $query);

//检查密码是否匹配
if (mysqlinumrows($result) == 1) {
$user = mysqlifetchassoc($result);
if (password_verify($password, $user[‘password’])) {

//生成一个随机的令牌
$token = bin2hex(random_bytes(32));

//将令牌存储在会话表中
$user_id = $user['id'];
$query = "INSERT INTO sessions (user_id, token, created_at) VALUES ('$user_id', '$token', NOW())";
mysqli_query($db, $query);

//在浏览器中设置一个 cookie,以便将会话令牌发送回服务器
setcookie('session_token', $token, time() + (86400 * 30), '/');

//重定向到受保护的页面
header('Location: protected_page.php');
exit();

}
}

//如果用户名或密码无效,则显示错误消息
$error = “Invalid username or password.”;
“`

最后,我们需要在页面上显示错误消息和登录表单,以便用户可以尝试重新登录。

“`php

“`

最后,我们需要在登录页面和受保护的页面中将会话令牌和所关联的用户 ID 存储在 PHP 变量中。如果会话令牌无效,则用户无法访问受保护的页面。

“`php
<?php
//获取令牌和用户 ID
$sessiontoken = $COOKIE[‘sessiontoken’];
$query = “SELECT user
id FROM sessions WHERE token = ‘$sessiontoken'”;
$result = mysqli
query($db, $query);

//检查令牌是否有效
if (mysqlinumrows($result) == 1) {
$session = mysqlifetchassoc($result);
$userid = $session[‘userid’];
} else {
//如果令牌无效,则重定向到登录页面
header(‘Location: login.php’);
exit();
}
“`

到目前为止,我们已经创建了一个简单的 PHP 登录文件,使用户可以登录并访问受保护的页面。当然,这只是一个非常基本的实现,有许多可改进的地方。例如,我们可以添加更复杂的密码验证和安全机制,以加强系统的安全性。

如有侵犯您的权益请邮件发送:rainpro@foxmail.com,站长看到会第一时间处理
客栈猫 » 写简单的php登录文件 (你如何写一个简单的php登录文件?)

提供最优质的资源集合

立即查看 了解详情