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日

相关文章

  • CentOS 7搭建多实例MySQL8的详细教程(想要几个搞几个)

    以下是“CentOS 7搭建多实例MySQL8的详细教程”的完整攻略: 实现多实例MySQL8的前提条件 在CentOS 7服务器上安装MySQL8。 在安装MySQL8时,需要将各个实例数据目录和端口分别设置。 操作步骤 第一步:查看MySQL8的安装路径 使用以下命令查看MySQL8的安装路径: which mysql 结果应该类似于: /usr/bin…

    other 2023年6月20日
    00
  • 在Linux命令行中创建和展示幻灯片的教程

    下面是在Linux命令行中创建和展示幻灯片的详细攻略。 安装软件 首先需要安装libreoffice软件来创建幻灯片,可以通过以下命令进行安装: sudo apt-get update sudo apt-get install libreoffice 创建幻灯片 使用libreoffice命令可以启动软件,进入图形化界面创建幻灯片,然而在命令行中输入libr…

    other 2023年6月26日
    00
  • 魔兽世界wlk怀旧服敏锐贼堆什么属性 敏锐贼属性优先级选择攻略

    魔兽世界wlk怀旧服敏锐贼堆什么属性 简介 敏锐贼(通常指刺杀贼)在WotLK版本中以其高伤害和高爆发力而为人熟知,但是对于玩家来说,在敏锐贼在分配属性时,往往会有些困惑。本攻略将为敏锐贼的属性分配提供一些指导。 敏锐贼属性优先级选择攻略 1. 确定攻击速度 在了解敏锐贼的属性之前,我们需要首先确定相应的攻击速度。敏锐贼需要以突袭和毒药等使用技能为主的方式发…

    other 2023年6月27日
    00
  • C# WinForm遍历窗体控件的3种方法

    下面是详细讲解“C# WinForm遍历窗体控件的3种方法”的完整攻略。 1. 使用控件容器的Controls属性 在C# WinForm中,遍历窗体控件的一种常见方法就是使用控件容器的Controls属性。Controls属性是一个Control.ControlCollection类型的对象,可以用来获取一个控件容器中的所有子控件。 示例代码如下: // …

    other 2023年6月27日
    00
  • mysql中设置默认时间为系统当前时间

    以下是“MySQL中设置默认时间为系统当前时间的完整攻略”,过程中包含两个示例说明的标准Markdown格式文本: MySQL中设置默认时间为系统当前时间 在MySQL中,可以设置默认时间为系统当前时间。以下是设置默认时间的详细步骤: 创建表时设置默认时间。可以在创建表设置默认时间。例如,以下是创建表时设置默认时间的示例: mysql CREATE TABL…

    other 2023年5月10日
    00
  • Android笔记之:在ScrollView中嵌套ListView的方法

    Android笔记之:在ScrollView中嵌套ListView的方法攻略 在Android开发中,有时候我们需要在一个ScrollView中嵌套一个ListView,以实现滚动视图中包含可滚动的列表。然而,由于ScrollView和ListView都具有滚动功能,直接将ListView放在ScrollView中会导致滚动冲突的问题。下面是一种解决这个问题…

    other 2023年7月28日
    00
  • 视频网站加速解决方案

    视频网站加速解决方案可以分为以下几个步骤: 步骤一:优化视频文件 使用视频编码器:使用流行的视频编码器(如FFmpeg)对视频进行压缩和编码。压缩视频文件可以大大减小文件大小,从而减少视频传输所需的带宽。 尽可能减少视频时长:将视频保持简洁并控制好长度,这可以加快视频文件的上传和下载速度。例如,在电子商务网站上,对于产品视频介绍,只需展示产品的主要功能和特点…

    other 2023年6月26日
    00
  • 如何申请icloud后缀的邮箱?icloud邮箱申请教程

    如何申请iCloud后缀的邮箱?iCloud邮箱申请教程 iCloud是苹果公司提供的云服务,用户可以通过iCloud邮箱来发送和接收电子邮件。下面是申请iCloud后缀的邮箱的详细攻略: 步骤一:创建Apple ID 打开苹果官方网站(https://www.apple.com)。 点击页面右上角的“登录”按钮。 在登录页面,点击“创建您的Apple ID…

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