PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】

以下是详细的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技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • python打开浏览器的方法python打开默认浏览器

    Python打开浏览器的方法:Python打开默认浏览器 Python提供了多种方法来打开浏览器,其中最简单的方法是使用webbrowser模块。web模块提供了一个open()函数,可以在默认浏览器中打开指定的URL。本文将介绍如何使用webbrowser模块打开默认浏览器,并提供两个示例说明。 步骤1:导入webbrowser模块 首先,我们需要导入we…

    other 2023年5月8日
    00
  • springsecurityoauth2授权失败(401)问题整理

    Spring Security OAuth2 授权失败(401)问题整理 问题描述 当使用 Spring Security OAuth2 进行授权时,有时会遇到“授权失败(401)”的问题。这个问题可能会出现在多种情况下,例如在从授权服务器获取访问令牌时,或者在使用访问令牌访问受保护的资源时。 问题原因 401 错误通常表示未经授权或非法请求。授权失败的原因…

    其他 2023年3月28日
    00
  • 使用telnet连接redis

    使用Telnet连接Redis Redis是一个高性能的键值数据库,它支持多种数据类型和持久化。可以使用telnet连接Redis,快速测试和调试Redis服务器。 前提条件 在开始之前,确保您已经安装并启动Redis服务器。您可以通过以下步骤安装和启动Redis服务器: 在终端中执行以下命令以安装Redis: sudo apt-get update sud…

    其他 2023年3月29日
    00
  • maven学习笔记——maven环境配置(1)

    Maven学习笔记——Maven环境配置(1) 什么是Maven Maven是一款基于Java的项目管理和构建工具,可以帮助开发者更加轻松、高效地管理项目依赖、构建项目以及开发项目文档等任务,因此受到了广泛的应用。 安装Maven Maven的安装过程相对简单,在此不加赘述。可以通过以下步骤来安装: 在官网(https://maven.apache.org/…

    其他 2023年3月28日
    00
  • eclipse同时开两个tomcat

    下面是“eclipse同时开两个tomcat的完整攻略”,包括配置多个tomcat服务器、创建多个web项目、配置多个tomcat服务器的端口号等方面。 配置多个tomcat服务器 首先,需要在 Eclipse 中配置多个 tomcat 服务器。可以按照以下步骤配置: 打开 Eclipse,点击“Window”菜单,选择“Preferences”选项。 在“…

    other 2023年5月5日
    00
  • mysql中cast()

    MySQL中Cast() 函数 在MySQL中,Cast()函数是一种数据类型转换函数,用于将一个数据类型转换成另一个数据类型,根据需求可以将一个字符串转为数值、日期转换为字符串等等。 Cast() 函数语法 Cast() 函数的基本语法如下所示: CAST(expr AS type) 其中,expr 代表需要进行类型转换的表达式或字段,type 是需要转换…

    其他 2023年3月28日
    00
  • Android实战–电话拨号器

    Android实战–电话拨号器的完整攻略 在Android应用程序中,我们可以使用电话拨号器来拨打电话。本文将介绍如何在Android应用程序中实现电话拨号器,包括权限申请、UI设计、拨号功能实现等。 1. 权限申请 在Android应用程序中,我们需要申请CALL_PHONE权限才能拨打电话。在AndroidManifest.xml文件中添加以下代码: …

    other 2023年5月5日
    00
  • 用jquery实现自定义风格的滑动条实现代码

    下面我将为您详细讲解使用 jQuery 实现自定义风格的滑动条的完整攻略。 第一步:引入 jQuery 库 首先,我们需要在页面中引入 jQuery 库,可以通过以下方式引入: <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js">…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部