我的意思是如果我检查第一个客户端输入并且可以,对同一输入的第二次检查总是错误的... 那是为什么?
我真的需要能够检查两次(一次用于客户端验证,第二次用于服务器端验证)
提前致谢!!!
编辑
澄清:
如果用户输入正常并且recaptcha返回true(我通过ajax将其发送到我的服务器,它向recaptcha的服务器发送请求)表单正在提交并通过POST发送2个变量:{{ 1}}值和recaptcha_challenge_field
值(已经检查过)并且我的服务器要求recaptcha的服务器再次检查这两个值以进行服务器端验证。
Jquery代码:
recaptcha_response_field
因此,正如您所看到的,有两个绝对相同的操作具有不同的结果(它仅警告$("#form_id").find("button").click(function(){
var c = $("#recaptcha_challenge_field").val(),
r = $("#recaptcha_response_field").val();
$.ajax({
url: "/ajax/captcha?challenge=" + c + "&response=" + r,
dataType: "json",
success: function(data){
if(data['is_valid']){
$.ajax({
url: "/ajax/captcha?challenge=" + c + "&response=" + r,
dataType: "json",
success: function(data){
if(data['is_valid']){
alert('OK');
}else{
alert('FAILED');
}
}
});
}else{
Recaptcha.reload();
}
}
});
return false;
});
)。
答案 0 :(得分:6)
因为它存储在提交结果时清除的会话中。在页面加载时,将生成该CAPTCHA值的新会话变量。
答案 1 :(得分:2)
为了通过AJAX / Jquery和服务器页面两次验证Captcha,这是我使用PHP的技术(基本思路是恢复Captcha的会话变量,如果在客户端验证时输入了正确的验证码,则通过Captcha Check方法清除,所以他们将在那里再次进行服务器端验证):
以下内容可能会让人感到困惑,因为这是我在HTML表单和HTML表单操作页面上重用客户端验证的一种懒惰方式。
在HTML表单上,添加一个额外的POST变量(例如$ _POST [“task”] =“validate”,它不是表单中的输入元素,将在表单提交时传递给客户端验证PHP页面
$.ajax({
type: "POST",
url: "registration_validate.php",
data: ({
task:"validate" << and other data >>
在客户端验证PHP页面
$securimage_session_cv = $_SESSION["securimage_code_value"]["default"];
$securimage_session_ct = $_SESSION["securimage_code_ctime"]["default"];
if ($securimage->check($_POST['captcha_code']) == false) {
// return false or print something
} else {
// if this script is called via ajax for form validation
if(isset($_POST['task']) && trim($_POST['task']) == "validate"){
// captcha will be cleared if valid/correct, restore them as it will be validated again on server side script
$_SESSION["securimage_code_value"]["default"] = $securimage_session_cv;
$_SESSION["securimage_code_ctime"]["default"] = $securimage_session_ct;
}
}
在服务器端验证页面或表单操作网址上,您将完整验证验证码。