我到处关注了几个tuts,并制作了我自己的带有会话的验证码,我想在我的更大的项目中实现。验证码应该像其他地方一样使用,在联系/发送电子邮件部分,以防止垃圾邮件重复。
问题-如果你错过验证码并点击后退按钮,验证码不会刷新。这和它的缺点一样好,在ajax中,这意味着验证码不会刷新页面,验证码也不会自动刷新。由于captcha是在不同的文件中创建的,我想再次调用相同的文件应该可以解决这个问题。
解决方案-我想要一个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"/> <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>";
}
?>发布于 2012-09-23 20:53:51
您需要使用一个计数器来跟踪尝试的次数。另外,确保取消设置验证码,这样它就不能被重用。代码如下:
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"/> <img src="generate captcha.php" /><br>
<input type="submit" value="Submit" name="Submit" />
</form>https://stackoverflow.com/questions/12552345
复制相似问题