我有一个网站使用SSI作为页面的页眉和页脚。
我已经创建了一个AJAX请求,它将所有表单数据发送到服务器上的脚本,该脚本将验证表单和reCAPTCHA一体化。
我遇到了一个小问题。由于所有文件扩展名都是shtml,我被迫使用纯HTML来显示reCAPTCHA。
PHP验证插件正在投入使用并告诉我“invalid-request-cookie。”
我已经检查并仔细检查了所有密钥,我唯一可以想到的是请求不喜欢我使用HTML来显示reCAPTCHA和用于验证它的PHP插件。< / p>
我已经研究过强迫我的服务器在shtml文件中解析PHP,所以我可以用PHP显示reCAPTCHA,但是由于服务器是GoDaddy IIS7,这似乎是不可能的。
我的问题是双重的:
我怀疑的确是我的问题吗?
如果是这样,有什么方法吗?
这是我的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发送质询和响应字段的实际值。所以我解决了这个问题,reCAPTCHA完美无缺。