【问题标题】:Google reCAPTCHA g-recpatcha-response has no value in PHPGoogle reCAPTCHA g-recaptcha-response 在 PHP 中没有价值
【发布时间】:2015-10-05 19:02:20
【问题描述】:

p.s:我放弃了这个,因为我没有找到解决方案并实现了我自己的 php 验证码,这很有效:) - http://www.the-art-of-web.com/php/captcha/

我花了很多时间和几天试图解决这个问题,但我似乎无法弄清楚。我在网上阅读了很多不同的教程和问题。

请记住,我的 PHP 水平相当基础。

我似乎无法在我的 php 文件中获取 'g-recaptcha-response' $_POST 值。

下面我总结了需要的重要代码...

文件1:contact.php

在头部标签之前

<?php 
session_start(); // start php session

// Setup session variables to save the form data
if( isset($_SESSION['contact_form_values']) ){
    extract( $_SESSION['contact_form_values'] );
}

include('contactengine.php');
?>

在头部标签中

<script src='https://www.google.com/recaptcha/api.js'></script><!-- reCAPTCHA form -->

在表单标签之间 Action="" 以便它发布到包含contactengine.php 文件的自身,以便它仅在用户单击提交按钮时运行?

<form class="contactform" method="POST" action="">

<div class="g-recaptcha" data-sitekey="6Lc92gkTAAAAAFKjZEOlY0cg9G8ubmlVoC13Xf3T"></div>

文件2:contactengine.php

在这之间

if($_SERVER["REQUEST_METHOD"] == "POST")

我有

if( isset( $_POST['g-recaptcha-response'] ) ){
        $captchaResponse = $_POST['g-recaptcha-response'];
    }

现在这是变量 $captchaResponse 没有被填充的地方,因为我像这样输出它的值:

if( !$captchaResponse ){ // check the POST recaptcha response value
        $resultMsg = 'Please check the captcha form. - '.$captchaResponse;
    }

因此,我在 $resultMsg 字符串中看不到响应代码的输出。

我唯一能想到的就是影响它,就是在contact.php 的开头包含contactengine.php 文件。并将动作设置为 =“”。但这就是教程指导我做的事情。所以也许不是……

我以http://www.9lessons.info/2014/12/google-new-recaptcha-using-php-are-you.html 为指导。

非常感谢!

【问题讨论】:

  • 使用浏览器的开发工具来观察您的网络流量,看看幕后发生了什么。也不要输出未经过滤的 POST 值(以避免 XSS 攻击)
  • 谢谢@m02ph3u5,我只是为了调试目的而设置它。此外,我在 chrome 中使用了开发工具,响应以 json 格式返回,但称为“uv​​resp”。我什至尝试用这个名字代替“g-recaptcha-response”,但没有运气。生病继续看
  • var_dump($_POST) 告诉你什么?
  • 等一下,谷歌会回复一个帖子请求吗?如果是,您不应该在您的开发工具中看到这一点。如果您必须解析自己请求的响应,则 $_POST 中不会有结果。

标签: php html captcha recaptcha contact-form


【解决方案1】:

你快到了!您只需要查询 Google 的 API。

if (isset($_POST['g-recaptcha-response'])) {
    $captcha = $_POST['g-recaptcha-response'];
}

if (!$captcha) {
    // Captcha wasn't checked, do something...
    exit;
}

$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKEYGOESHERE&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);

if ($response.success == false) {
    // Captcha failed! Do something!
} else {
    // Captcha is valid! Do something else!
}

SECRETKEYGOESHERE 替换为您的实际密钥,就可以了!

【讨论】:

  • 嗨,对不起,我没有说清楚,但我已经设置了这部分。 'g-recaptcha-response' $_POST 值在我的 isset 语句中为假
  • 顺便说一句,他需要为这种方法启用 fopen 包装器 - 许多托管解决方案已禁用 em
  • 如果未选中该复选框,$_POST['g-recaptcha-response'] 将为空。如果选中它,您将得到一个长字符串,将在我上面的代码中的$response 处查询。完成验证码后它是空的吗?
  • 我之前体验过include 在 PHP 继续运行脚本之前没有 100% 加载 - 如果你把它放到同一个文件中,而不是通过包含会发生什么?我真的无法在您的代码中发现任何错误。
  • 这个不走运,我正在考虑离开它并找到一个不同的 reCAPTCHA 脚本......
猜你喜欢
  • 2015-08-21
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 2016-12-16
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多