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日

相关文章

  • 微信小程序page的生命周期和音频播放及监听实例详解

    下面我将详细讲解“微信小程序page的生命周期和音频播放及监听实例详解”的完整攻略。 微信小程序 page 的生命周期 微信小程序 page 是小程序的基本页面,具有生命周期,可以用于页面的初始化和页面的状态管理等。下面是小程序 page 的生命周期方法: onLoad(options)在页面加载时触发,options 是页面参数,可以通过 this.dat…

    other 2023年6月27日
    00
  • depends工具和dumpbin工具使用

    depends工具和dumpbin工具使用 当我们在进行Windows程序开发时,工具的重要性不可忽视。在开发程序时,程序内部的依赖关系是非常重要的,能够帮助开发者了解程序所需运行的库和环境,而想要深入了解程序的内部原理和结构,我们需要应用一些专业的工具。 在这里,我将向大家介绍两个广泛应用于Windows开发的工具:depends和dumpbin。 dep…

    其他 2023年3月28日
    00
  • vmware在宿主上没有vmnet0、vmnet8 解决方法

    当在VMware中创建虚拟机时,可能会遇到“vmware在宿主上没有vmnet0、vmnet8”的问题。这个问题通常是由于VMware网络适配器未正确安装或配置引起的。下面是解决这个问题的完整攻略: 步骤1:检查VMware网络适配器 在VMware中,可以通过以下步骤检查网络适配器: 打开VMware; 点击“编辑”菜单; 选择“虚拟网络编辑器”; 在“虚…

    other 2023年5月6日
    00
  • c#常用表格控件dataGridView的分页显示

    关于c#常用表格控件dataGridView的分页显示,这里提供一份完整攻略,包含以下几个部分: 准备工作 数据源绑定 分页控件的使用 代码示例 参考资料 下面对每个部分进行详细说明。 一、准备工作: 在开始使用dataGridView进行分页显示之前,需要做好一些准备工作,包括:1. 安装并引用数据库基础组件,例如MySql.Data.dll;2. 创建数…

    other 2023年6月26日
    00
  • Pycharm导入Python包,模块的图文教程

    以下是PyCharm导入Python包和模块的图文教程的完整攻略: 打开PyCharm并创建一个新的Python项目。 在项目的根目录下创建一个新的Python文件。 在Python文件中,使用import关键字导入需要的包或模块。例如: python import numpy as np import pandas as pd PyCharm会自动检测导入…

    other 2023年10月14日
    00
  • Android开发仿QQ空间根据位置弹出PopupWindow显示更多操作效果

    Android开发仿QQ空间根据位置弹出PopupWindow显示更多操作效果攻略 简介 在Android开发中,我们可以使用PopupWindow来实现类似QQ空间的效果,即根据位置弹出一个窗口,显示更多操作选项。本攻略将详细介绍如何实现这一效果。 步骤 步骤一:准备工作 在开始之前,确保你已经具备以下条件:- 了解Android开发基础知识- 已经创建一…

    other 2023年8月26日
    00
  • linuxshell实现用for循环100次的方法

    以下是关于“Linux Shell实现用for循环100次的方法”的完整攻略: for循环 在Linux Shell中,可以使用for循环来重复执行某个命令或语句。for循环的基本语法如下: for 变量 in 列表 do 命令或语句 done 其中,变量表示循环变量,表示需要循环的元素,命令或语句表示需要执行的操作。 示例一:使用seq命令 以下是一个使用…

    other 2023年5月9日
    00
  • 小乌龟git分支合并到主干

    小乌龟Git分支合并到主干 在Git中,分支是一种非常重要的概念,可以让开发者在不影响主干的况下进行代码开发和测试。当分支开发完成后,需要分支合并到主干中,以便将功能或修复的发布到生产环境中。本文将介绍如何使用小乌龟Git将分支合并到主干中,并提供两个示例说明。 1. 创建分支 在小乌龟Git中,可以使用以下步骤创建分支: 在主干上右键单击,选择“创建分支。…

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