• 技术文章 >后端开发 >PHP问题

    php如何实现验证码登录

    VV2021-10-14 15:37:19原创164

    php实现验证码登录的方法:1、创建html页面显示验证码;2、创建php文件,接受前端页面传入的验证码信息;3、创建验证码生成PHP文件。

    本文操作环境:windows10系统、php 7、thinkpad t480电脑。

    验证码在我们的日常生活中非常常见,使用验证码有诸多好处,如:

    防止恶意的破解密码。如一些黑客为了获取到用户信息,通过不同的手段向服务器发送数据,验证猜测用户信息的准确性。

    防止恶意的刷票,论坛灌水。这种在论坛中长期存在灌水的现象,比如贴吧,不断发送帖子。现在百度贴吧已经针对用户发帖的时间做了一个时间的限制,当一定时间内发帖过多是无法继续发帖的。

    防止恶意的请求。如用户提交一个表单信息,通过不断向后台请求数据信息造成服务器资源的浪费,以及恶意的攻击。

    趣味性。这一点属于个人观点,当我们提交表单的时候,如遇到一些有趣的验证码方式,能够增强用户对网站的喜爱程度。

    获取用户信息。这一点在现目前的站点中是屡见不鲜的事情了。如我们注册一个站点的账号,需要通过手机验证码才可以注册成功。网站在拿到用户的电话号码之后会给手机号主发送一些营销信息。

    那么我们该如何实现验证码登录功能呢?一起来看下吧!

    环境配置:

    只需要本地安装了PHP的GD扩展库即可使用。如何查看呢,创建一个PHP文件在该文件中写入<?php phpinfo();?>,访问该文件,如果查看到了GD库已经安装了,则可以使用。

    具体代码实现:

    1、我们先创建一个html页面显示验证码

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>登陆</title>
    </head>
    <body>
        <form action="./login.php" method="post">
            <img src="image_captcha.php"  onclick="this.src='image_captcha.php?'+new Date().getTime();" width="200" height="200"><br/>
            <input type="text" name="captcha" placeholder="请输入图片中的验证码"><br/>
            <input type="submit" value="验证">
        </form>
    </body>
    </html>

    2、创建一个PHP文件,接受前端页面传入的验证码信息

    <?php
    /**
     * 接受用户登陆时提交的验证码
     */
    session_start();
    //1. 获取到用户提交的验证码
    $captcha = $_POST["captcha"];
    //2. 将session中的验证码和用户提交的验证码进行核对,当成功时提示验证码正确,并销毁之前的session值,不成功则重新提交
    if(strtolower($_SESSION["captchaimg"]) == strtolower($captcha)){
        echo "验证码正确!";
        $_SESSION["captcha"] = "";
    }else{
        echo "验证码提交不正确!";
    }

    3、创建验证码生成PHP文件

    <?php
    /**
     * 字母+数字的验证码生成
     */
    // 开启session
    session_start();
    //1.创建黑色画布
    $image = imagecreatetruecolor(100, 30);
     
    //2.为画布定义(背景)颜色
    $bgcolor = imagecolorallocate($image, 255, 255, 255);
     
    //3.填充颜色
    imagefill($image, 0, 0, $bgcolor);
     
    // 4.设置验证码内容
     
    //4.1 定义验证码的内容
    $content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
     
    //4.1 创建一个变量存储产生的验证码数据,便于用户提交核对
    $captcha = "";
    for ($i = 0; $i < 4; $i++) {
        // 字体大小
        $fontsize = 10;
        // 字体颜色
        $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
        // 设置字体内容
        $fontcontent = substr($content, mt_rand(0, strlen($content)), 1);
        $captcha .= $fontcontent;
        // 显示的坐标
        $x = ($i * 100 / 4) + mt_rand(5, 10);
        $y = mt_rand(5, 10);
        // 填充内容到画布中
        imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
    }
    $_SESSION["captcha"] = $captcha;
     
    //4.3 设置背景干扰元素
    for ($$i = 0; $i < 200; $i++) {
        $pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
        imagesetpixel($image, mt_rand(1, 99), mt_rand(1, 29), $pointcolor);
    }
     
    //4.4 设置干扰线
    for ($i = 0; $i < 3; $i++) {
        $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
        imageline($image, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $linecolor);
    }
     
    //5.向浏览器输出图片头信息
    header('content-type:image/png');
     
    //6.输出图片到浏览器
    imagepng($image);
     
    //7.销毁图片
    imagedestroy($image); 

    推荐学习:php培训

    以上就是php如何实现验证码登录的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php 验证码
    上一篇:php怎么实现微信登录 下一篇:怎么拿捏PHP数组的类型
    大前端线上培训班

    相关文章推荐

    • JavaScript怎么实现验证码倒计时• php5.3 验证码不显示怎么办• php版本低不显示验证码怎么办• php验证码不显示字符怎么办

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网