Pembangunan PHP: Bagaimana untuk melaksanakan fungsi kod pengesahan imej

PHPz
Lepaskan: 2023-09-20 16:02:02
asal
1077 orang telah melayarinya

Pembangunan PHP: Bagaimana untuk melaksanakan fungsi kod pengesahan imej

Pembangunan PHP: Bagaimana untuk melaksanakan fungsi kod pengesahan imej

Dalam pembangunan WEB, untuk mengelakkan robot atau serangan berniat jahat, selalunya perlu menggunakan kod pengesahan untuk mengesahkan identiti pengguna. Antaranya, kod pengesahan gambar ialah jenis kod pengesahan yang biasa, yang bukan sahaja dapat mengenal pasti pengguna dengan berkesan, tetapi juga meningkatkan pengalaman pengguna. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi kod pengesahan imej dan menyediakan contoh kod khusus.

1. Hasilkan imej kod pengesahan

Pertama, kita perlu menjana imej kod pengesahan dengan aksara rawak. PHP menyediakan perpustakaan GD untuk menjana imej dengan mudah. Berikut ialah contoh fungsi yang menghasilkan imej kod pengesahan:

function generateCaptchaImage($length = 4, $width = 120, $height = 40, $font = 'path/to/font.ttf'){
    $image = imagecreatetruecolor($width, $height);
    $bgColor = imagecolorallocate($image, 255, 255, 255);
    $textColor = imagecolorallocate($image, 0, 0, 0);
    $code = generateRandomCode($length); // 生成随机验证码

    imagefill($image, 0, 0, $bgColor);
    imagettftext($image, 20, 0, 10, 30, $textColor, $font, $code); // 在图片上写入验证码

    // 添加干扰线
    for ($i = 0; $i < 5; $i++) {
        $color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
        imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $color);
    }

    // 输出图像
    header('Content-type: image/png');
    imagepng($image);
    imagedestroy($image);
    
    return $code;
}

function generateRandomCode($length = 4){
    $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
    $code = '';
    
    for ($i = 0; $i < $length; $i++) {
        $code .= $characters[rand(0, strlen($characters) - 1)];
    }
    
    return $code;
}
Salin selepas log masuk

Fungsi generateCaptchaImage di atas digunakan untuk menjana imej kod pengesahan dan mengembalikan rentetan kod pengesahan sebagai nilai pulangan fungsi. generateCaptchaImage用于生成验证码图片,并将验证码字符串作为函数返回值。

二、显示验证码图片与验证用户输入

在要显示验证码的页面中,可以通过<img alt="Pembangunan PHP: Bagaimana untuk melaksanakan fungsi kod pengesahan imej" >标签来显示验证码图片,并使用session来保存验证码。

session_start();
$captcha = generateCaptchaImage();
$_SESSION['captcha'] = $captcha;
Salin selepas log masuk

创建一个验证码输入框和提交按钮:

<form action="verify.php" method="POST">
  <img src="captcha.php" alt="captcha image">
  <input type="text" name="captcha" placeholder="请输入验证码">
  <button type="submit">提交</button>
</form>
Salin selepas log masuk

验证用户输入的验证码:

session_start();
$captcha = $_SESSION['captcha'];

if(isset($_POST['captcha']) && $_POST['captcha'] == $captcha){
    // 验证成功
    echo "验证码输入正确!";
} else {
    // 验证失败
    echo "验证码输入错误!";
}
Salin selepas log masuk

三、验证码校验和过期处理

为了增强验证码的安全性,我们还可以添加过期时间和校验码处理。以下是一个增强版的验证码验证示例:

session_start();
if(isset($_POST['captcha']) && isset($_SESSION['captcha'])){
    $captcha = $_SESSION['captcha'];
    $inputCaptcha = $_POST['captcha'];
    
    if(time() - $_SESSION['captcha_time'] > 300){ // 验证码过期时间为5分钟
        echo "验证码已过期,请重新输入!";
        return;
    }

    if(strtolower($inputCaptcha) === strtolower($captcha)){
        echo "验证码输入正确!";
    } else {
        echo "验证码输入错误!";
    }
} else{
    echo "请输入验证码!";
}
Salin selepas log masuk

在生成验证码时,将当前时间也保存到$_SESSION

2. Paparkan imej kod pengesahan dan sahkan input pengguna

Dalam halaman di mana kod pengesahan akan dipaparkan, anda boleh memaparkan imej kod pengesahan melalui teg <img alt="Pembangunan PHP: Bagaimana untuk melaksanakan fungsi kod pengesahan imej" > dan gunakan session untuk menyimpan kod pengesahan.

session_start();
$captcha = generateCaptchaImage();
$_SESSION['captcha'] = $captcha;
$_SESSION['captcha_time'] = time();
Salin selepas log masuk
Buat kotak input kod pengesahan dan butang hantar:

rrreee

Sahkan kod pengesahan yang dimasukkan oleh pengguna:

rrreee

3. Pengesahan kod pengesahan dan pemprosesan tamat tempoh🎜🎜Untuk meningkatkan keselamatan kod pengesahan, kami. juga boleh menambah masa tamat tempoh dan pemprosesan semak. Berikut ialah versi dipertingkat bagi contoh pengesahan kod pengesahan: 🎜rrreee🎜Apabila menjana kod pengesahan, simpan masa semasa ke $_SESSION: 🎜rrreee🎜Kod di atas akan mengesahkan masa tamat tempoh dan pengesahan Selepas mengesahkan kod, maklumat segera yang sepadan akan dikeluarkan. 🎜🎜Ringkasan: 🎜🎜Melalui langkah di atas, kita boleh menggunakan PHP untuk melaksanakan fungsi kod pengesahan imej. Pertama, imej kod pengesahan dengan aksara rawak dijana dan dipaparkan pada halaman. Kemudian, kod pengesahan yang dimasukkan oleh pengguna dibandingkan dengan kod pengesahan yang disimpan pada pelayan untuk menentukan sama ada input adalah betul. Pada masa yang sama, untuk meningkatkan keselamatan kod pengesahan, anda boleh menetapkan masa tamat tempoh dan menambah pemprosesan kod pengesahan. Pelaksanaan fungsi kod pengesahan boleh digunakan dalam operasi sensitif seperti pendaftaran pengguna dan log masuk untuk meningkatkan keselamatan sistem dan pengalaman pengguna. 🎜🎜Nota: Untuk kod di atas berjalan seperti biasa, anda perlu memastikan bahawa perpustakaan GD telah dipasang dengan betul. 🎜

Atas ialah kandungan terperinci Pembangunan PHP: Bagaimana untuk melaksanakan fungsi kod pengesahan imej. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!