【问题标题】:Captcha Refresh (Future Ajax)验证码刷新(未来的 Ajax)
【发布时间】:2012-09-15 03:56:07
【问题描述】:

我在这里和那里遵循了一些 tuts 并制作了我自己的验证码会话,我想在我的更大项目中实施。验证码应该像其他地方一样在联系/发送电子邮件部分使用,以防止垃圾邮件重复。

问题 - 如果您错过了验证码并点击返回按钮,验证码不会刷新。这既好又坏,使用 ajax 意味着验证码不会刷新页面,验证码不会自行刷新。由于验证码是在不同的文件中制作的,我想再次调用同一个文件应该可以解决问题。

解决方案 - 我想要一个 3 次尝试系统,如果验证码没有被猜到 3 次,那么页面会被刷新。

PHP 验证码:

<?php
session_start();
$text = rand(10000, 99999);
$_SESSION['captcha'] = $text;
// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 25, 25, 25);
$black = imagecolorallocate($im, 0, 0, 255);
imagefilledrectangle($im, 0, 0, 399, 29, $white);


$font = 'Candara.ttf';

imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

imagepng($im);
imagedestroy($im);
?>

HTML 测试代码:

<form action="submit.php" method="post">
Message: <textarea name="comment"></textarea><br>
Captcha: <input type="text" name="val_code"/>&nbsp;&nbsp;<img src="generate captcha.php"><br>
<input type="submit" value="Submit" name="Submit"/>
</form>

提交 PHP 代码:

<?php
session_start();
if($_POST["val_code"] != $_SESSION['captcha'] OR $_SESSION['captcha'] == '') {
echo "<b><font style='color: purple'>Wrong captcha value. Please go back and resend the message</font></b>";
}
else
{
echo "<b><font style='color: green'>Thank you for your message!</font></b>";
}
?>

【问题讨论】:

    标签: php ajax submit captcha


    【解决方案1】:

    您需要使用一个计数器来记录尝试次数。另外,请确保取消设置验证码,使其无法重复使用。请参阅以下代码:

    PHP 验证码:

    <?php
    session_start();
    if ($_SESSION['tries'] < 2 && $_SESSION['captcha']) {
        $text = $_SESSION['captcha'];
    } else {
        $_SESSION['tries'] = 0;
        $text = rand(10000, 99999);
        $_SESSION['captcha'] = $text;
    }
    // Create the image
    $im = imagecreatetruecolor(400, 30);
    
    // Create some colors
    $white = imagecolorallocate($im, 255, 255, 255);
    $grey = imagecolorallocate($im, 25, 25, 25);
    $black = imagecolorallocate($im, 0, 0, 255);
    imagefilledrectangle($im, 0, 0, 399, 29, $white);
    
    
    $font = 'Candara.ttf';
    
    imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
    
    imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
    
    imagepng($im);
    imagedestroy($im);
    ?>
    

    PHP 代码:

    <?php
    session_start();
    if ($_SESSION['tries']>=2) {
       echo "<b><font style='color: purple'>Captcha has expired! You need to go back and reload the page</font></b>";
    } else if($_POST["val_code"] != $_SESSION['captcha'] OR $_SESSION['captcha'] == '') {
    echo "<b><font style='color: purple'>Wrong captcha value. Please go back and resend the message</font></b>";
    $_SESSION['tries']++;
    }
    else
    {
    unset($_SESSION['captcha']);
    unset($_SESSION['tries']);
    echo "<b><font style='color: green'>Thank you for your message!</font></b>";
    }
    ?>
    

    html测试代码:

    <form action="submit.php" method="post">
    Message: <textarea name="comment"></textarea><br>
    Captcha: <input type="text" name="val_code"/>&nbsp;&nbsp;<img src="generate captcha.php" /><br>
    <input type="submit" value="Submit" name="Submit" />
    </form>
    

    【讨论】:

    • 验证码php的代码有问题。它仅在 $text var 在 if 之前才有效。如果变量在 if 中,则不起作用。
    • 代码卡住了——第一次很好用。但是在“页面刷新”之后,会话变量不会被取消设置,并且 if 子句会生成一个空图像,因为第一个 if 中不存在 $text var。代码需要更多修正
    • 应该是$text = $_SESSION['captcha'];
    • 新图像没有刷新,我相信会话验证码和尝试卡住了。
    • 验证码生成第三行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2014-09-29
    • 2016-01-22
    • 2020-05-01
    • 2012-04-26
    相关资源
    最近更新 更多