reCAPTCHA:为什么我不能两次检查相同的结果?

时间:2012-02-10 12:07:48

标签: captcha recaptcha

我的意思是如果我检查第一个客户端输入并且可以,对同一输入的第二次检查总是错误的... 那是为什么?

我真的需要能够检查两次(一次用于客户端验证,第二次用于服务器端验证)

提前致谢!!!

编辑

澄清:

如果用户输入正常并且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; }); )。

2 个答案:

答案 0 :(得分:6)

因为它存储在提交结果时清除的会话中。在页面加载时,将生成该CAPTCHA值的新会话变量。

答案 1 :(得分:2)

为了通过AJAX / Jquery和服务器页面两次验证Captcha,这是我使用PHP的技术(基本思路是恢复Captcha的会话变量,如果在客户端验证时输入了正确的验证码,则通过Captcha Check方法清除,所以他们将在那里再次进行服务器端验证):

  1. 以下内容可能会让人感到困惑,因为这是我在HTML表单和HTML表单操作页面上重用客户端验证的一种懒惰方式。

  2. 在HTML表单上,添加一个额外的POST变量(例如$ _POST [“task”] =“validate”,它不是表单中的输入元素,将在表单提交时传递给客户端验证PHP页面

    $.ajax({
        type: "POST",
        url: "registration_validate.php", 
        data: ({
            task:"validate" << and other data >>
    
  3. 在客户端验证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;
        }
    }
    
  4. 在服务器端验证页面或表单操作网址上,您将完整验证验证码。