我正在创建一个非常简单的验证码验证过程。
(当用户尝试登录我的网站3次,但没有成功时,他被重定向到Captcha Page(captcha.php),以验证他不是垃圾邮件机器人)
Captcha值本身是从一串字母和数字中随机生成的。总共6位数。
然后,我将此值与用户输入到文本框中的值进行比较。如果值匹配,则用户可以继续。如果没有,则重新加载页面,显示错误消息,并生成新的验证码。
很简单。没有javascript,没有ajax。
除了一件事:如果用户提供正确的值,Captcha不会重定向。
相反,它每次都会给出错误消息。
<?php session_start();
include 'database_connect.php';
function getRandomString($length) {
$validCharacters =
"ABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
$validCharNumber = strlen($validCharacters);
$result = "";
for ($i = 0; $i < $length; $i++) {
$index = mt_rand(0, $validCharNumber - 1);
$result .= $validCharacters[$index];
}
return $result; }
$captcha_value = getRandomString(6);
?>
<!DOCTYPE html>
<html>
<head>
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
<META CHARSET="UTF-8">
<title>Captcha Test</title>
</head>
<body>
<fieldset><legend>CAPTCHA :</legend>
<?php
if (isset($_POST['submit'])) {
$post_captcha = $_POST['captcha'];
if ($post_captcha == $captcha_value) {
$clear_failed_logins = mysqli_query($conn,("Delete FROM
login_attempts where login =
'$_POST[login]'"))
or die(mysqli_error($conn));
header ("Location: /example.com/login.php");
exit();
}
else {
echo "<p style='color:red; font-weight:bold;'>The value you
entered is not correct! Please try again.</p>";
}
}
?>
<p>Please input the characters you see into the text-box below :</p>
<p> <?= $captcha_value ?> </p>
<form method="POST" action="captcha.php">
<input type="text" name="captcha" id="captcha" size=10
autocomplete="off" required><br><br><br>
<input type="submit" name="submit" id="submit" value="SUBMIT">
</form>
</fieldset>
答案 0 :(得分:1)
在向用户输出内容后,您无法使用php中的标题重定向,因此如果在输出内容之前将其移动到if页面的顶部。 如果您想在此位置重定向,请尝试元刷新
<meta http-equiv="refresh" content="0; URL=http://www.domain.com">
此外,您应该将验证码值存储在表单中,因为每次页面刷新时都会重新生成(因此在表单提交后),我建议您使用reCaptcha进行尝试,这很容易实现,更安全