首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证码刷新(未来的Ajax)

验证码刷新(未来的Ajax)
EN

Stack Overflow用户
提问于 2012-09-23 20:23:32
回答 1查看 1.8K关注 0票数 1

我到处关注了几个tuts,并制作了我自己的带有会话的验证码,我想在我的更大的项目中实现。验证码应该像其他地方一样使用,在联系/发送电子邮件部分,以防止垃圾邮件重复。

问题-如果你错过验证码并点击后退按钮,验证码不会刷新。这和它的缺点一样好,在ajax中,这意味着验证码不会刷新页面,验证码也不会自动刷新。由于captcha是在不同的文件中创建的,我想再次调用相同的文件应该可以解决这个问题。

解决方案-我想要一个3尝试系统,如果验证码不是猜测3次,那么页面是刷新的。

PHP验证码:

代码语言:javascript
运行
复制
<?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测试代码:

代码语言:javascript
运行
复制
<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代码:

代码语言:javascript
运行
复制
<?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>";
}
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-23 20:53:51

您需要使用一个计数器来跟踪尝试的次数。另外,确保取消设置验证码,这样它就不能被重用。代码如下:

PHP验证码:

代码语言:javascript
运行
复制
<?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代码:

代码语言:javascript
运行
复制
<?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测试代码:

代码语言:javascript
运行
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12552345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档