我正在尝试使用表单集成captchia代码。我有一个基本格式,我可以让captcha部分在自己的php页面上工作。我也能够在自己的php页面中显示一个表单。我遇到的问题是我不确定如何让两个部分一起工作。
这是我所拥有的内容:
<?php
session_start();
if (isset($_POST['captcha'])) {
$_SESSION['captcha'] = rand(0, 99999999999);
} else {
if ($_SESSION['captcha']!==$_POST['captcha']) {
echo 're-enter a new captcha!';
$_SESSION['captcha'] = rand(0, 99999999999);
}
}
?>
<form action="formx.php" method="POST">
<ul>
<li>
Username:<br>
<input type"text" name="username">
</li>
<li>
Password:<br>
<input type="password" name="password">
</li>
<li>
Password again:<br>
<input type="password" name="password2">
</li>
<li>
Email:<br>
<input type="text" name="email">
</li>
<li>
<input type="submit" name="captcha" value="submit">
</li>
</ul>
</form>
答案 0 :(得分:0)
如果你走过它,你可能会错过几个步骤:
if ($_SERVER['REQUEST_METHOD']!='POST') //If initial load, load up captcha into session
$_SESSION['captcha'] = rand(0,9999999999);
else{//Means form was submitted
if (isset($_POST['captcha'])) {//Check if they entered
if ($_SESSION['captcha']!==$_POST['captcha']) {//check if ! correct, reissue new captcha
echo 're-enter a new captcha!';
$_SESSION['captcha'] = rand(0, 99999999999);
}else{
//Everything was good, handle data
}
}else{//Nothing was entered, give them new captcha
echo 'please enter the captcha!';
$_SESSION['captcha'] = rand(0, 99999999999);
}
}
现在,当您向用户显示时,会出现棘手的部分。如果你把:
<li>
Please type <?=$_SESSION['captcha']?>:<br/>
<input type="submit" name="captcha" value="submit">
</li>
机器人将能够绕过这一点。所以你需要弄清楚如何解决这个问题。只需显示数字并告诉他们输入是好的,并将阻止非常基本的机器人。对它进行模糊处理(<span>1</span><span>2</span>
)可能会使其变得更加困难,但机器人仍然可以解析它并绕过它。将其保存为Javascript变量然后检查它也可能有效,但如果机器人足够聪明,可以再次绕过它。 iframe可以工作,图像可以工作,用户代理解析可以帮助等等。所有这些都可以工作,但是由您决定如何实现它以及您想要它的安全性。
就个人而言,虽然我是Recaptcha的粉丝,因为它通常很容易实现,并且需要最少的编码。我还使用GD和TrueType库来制作验证码图像,但如果你可以使用Recaptcha,这确实需要更多的编程。最后,我确实喜欢在页面加载后加载的Javascript数学问题,这些机器人在加载和查明正在发生的事情时会有更难的时间。
毕竟说完了,做你想做的事。如果您遇到困难,请发布您的代码,我们可以帮助您。
答案 1 :(得分:0)
您必须使用之前的验证码检查新页面提交..所以请在会话旧版本中将旧值分配为$ _SESSION ['oldCaptcha'] ..所以您的代码应该是,
session_start();
if (isset($_POST['captcha'])) {
if($_SESSION['oldCaptcha'] == $_POST['captcha']) {
echo 'Captcha is Successfully Matched';
}
else {
$_SESSION['oldCaptcha'] = rand(0, 99999999999);
}
}
如果您的答案是insde else循环,则在表单中使用 $ _ SESSION ['oldCaptcha'] 显示以供用户输入...
答案 2 :(得分:0)
试试这个
if($_SERVER['REQUEST_METHOD']=="POST"){
if ($_POST['capt'] == $_SESSION['captcha'] ){
echo "Sucsess";
$capt= rand(0, 99999999999);
$_SESSION['captcha'] =$capt;
}else{
echo "Fail";
}
}else{
$capt='';
$capt= rand(0, 99999999999);
$_SESSION['captcha'] =$capt;
}
?>
<form action="" method="post">
<ul>
<li>
Username:<br>
<input type="text" name="username">
</li>
<li>
Password:<br>
<input type="password" name="password">
</li>
<li>
Password again:<br>
<input type="password" name="password2">
</li>
<li>
Email:<br>
<input type="text" name="email">
</li>
<li>
Captcha:<br>
<input type="text" name="capt" >
<?php echo "Captcha : " .$capt ; ?>
</li>
<li>
<input type="submit" name="captcha" value="submit">
</li>
</ul>
</form>