0

我有一个使用 SSI 作为页眉和页脚的网站。

我创建了一个 AJAX 请求,它将所有表单数据发送到服务器上的脚本,该脚本将验证表单和 reCAPTCHA 合二为一。

我遇到了一个小问题。由于所有文件扩展名都是 shtml,我被迫使用纯 HTML 来显示 reCAPTCHA。

PHP 验证插件很麻烦,告诉我“invalid-request-cookie”。

我已经检查并仔细检查了所有的键,我唯一能想到的是该请求不喜欢我使用 HTML 来显示 reCAPTCHA 和 PHP 插件来验证它的事实。

我研究过强制我的服务器解析 shtml 文件中的 PHP,以便我可以使用 PHP 显示 reCAPTCHA,但由于服务器是 GoDaddy IIS7,这似乎是不可能的。

我的问题有两个:

  1. 我怀疑真的是我的问题吗?

  2. 如果是这样,有没有办法解决这个问题?

这是我的 HTML/JavaScript:

    <div id="recaptcha-widget">
        <script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=public_key_WAS_inserted_here">
                </script>
                <noscript>
            <iframe src="http://www.google.com/recaptcha/api/noscript?k=public_key_WAS_inserted_here"
                    height="300" width="500" frameborder="0"></iframe><br>
            <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
            <input type="hidden" name="recaptcha_response_field" value="manual_challenge">
        </noscript>
    </div>
    <p style="padding: 0 45%">
        <input type="submit" value="Submit" id="submit-button">
    </p>

这是对我的 PHP 验证脚本的 JavaScript AJAX 请求。

    var dataToSend = $('form #contactForm').serialize();

    if($('#contactForm #response').hasClass('error') === false){
        jQuery.ajax({

            type: 'POST',
            url: '../contact.php',
            data: dataToSend,
            cache: false,
            beforeSend: function(){
                $('#contactForm #response').show().removeClass().addClass('sending response').html("Sending email.  Please wait...");
            },
            error: function(){
                $('#contactForm #response').show().removeClass().addClass('error response').html("Internal error.  Please try again.");
            },
            success: function(response){
                if (response !== "The recaptcha response was invalid.  Please try again."){
                $('#contactForm #response').show().removeClass().addClass('error response').html(response);
                } else {
                    $('#contactForm #response').show().removeClass().addClass('success response').html(response);
                }
            },
            timeout: 20000

        });
    }

这是 PHP 验证脚本。我的服务器上有recaptchalib.php。

    <?php
    require_once('recaptchalib.php');
    $privatekey = "privatekey_WAS_inserted_here";
    $resp = recaptcha_check_answer ($privatekey,
                                    $_SERVER["REMOTE_ADDR"],
                                    $_POST["recaptcha_challenge_field"],
                                    $_POST["recaptcha_response_field"]);

    if (!$resp->is_valid) {
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
        "(reCAPTCHA said: " . $resp->error . ")");
    } else {
        // My verification on this side.  This part of the if/else never runs.
    }
    ?>

已解决:所以我想出了自己的问题。在我的 JavaScript 中,我没有发送验证码的挑战和响应字段的实际值。所以我解决了这个问题,reCAPTCHA 可以完美运行。

4

0 回答 0