1

私はあちこちでいくつかのツットをたどり、より大きなプロジェクトに実装したいセッションで独自のキャプチャを作成しました。キャプチャは、スパムの繰り返しを防ぐために、連絡先/電子メールの送信セクションで他の場所と同様に使用する必要があります.

問題 - キャプチャを見逃して [戻る] ボタンを押すと、キャプチャが更新されません。これは悪いことと同じくらい良いことであり、ajax を使用すると、キャプチャがページを更新せず、キャプチャが自動的に更新されないことを意味します。キャプチャは別のファイルで作成されているため、同じファイルを再度呼び出すと問題が解決するはずです。

解決策 - 3 回試行するシステムが必要です。キャプチャが 3 回推測されない場合は、ページが更新されます。

PHP CAPTCHA コード:

<?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>";
}
?>
4

1 に答える 1

1

試行回数を追跡するカウンターを使用する必要があります。また、再利用できないように、キャプチャの設定を解除してください。以下のコードを参照してください。

PHP CAPTCHA コード:

<?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>
于 2012-09-23T12:53:51.363 に答える