0

我在表单中使用Simple PHP Captcha,它在 Firefox、Opera 和 IE 中运行良好,但在 Chrome 中却不行。图像加载正常,我能够传递验证码,但是当我尝试像这样检查它时它失败了:

if( $_POST['CaptchaCode'] === $_SESSION['captcha']['code'] )

当我echo $_POST['CaptchaCode']得到我输入的正确代码但是当我echo $_SESSION['captcha']['code']得到与我在验证码中看到的不同的代码时。它看起来像是新生成的。

提前致谢。

4

3 回答 3

1

我有同样的问题。“简单的 PHP 验证码”不仅仅在 Chrome 中工作。

我的案例可能非常具体,但可能会有所帮助。首先,您需要知道:

  • 我的应用程序返回一个 404 错误页面,其中包含带有验证码的联系表单。
  • favicon.ico即使您没有在您的部分中声明任何网站图标,谷歌浏览器也会查找<head>。在这种情况下,Chrome 会查找根目录 ( /favicon.ico)。

其余的很明显 :) 在我的服务器上没有 favicon,所以我的“联系我们”页面加载了验证码图像,但另外 google 发送了对 favicon.ico 的请求,我的服务器返回 404 错误页面,其中还包含联系人使用 CAPTCHA 形式重写代码$_SESSION

所以我通过添加一个 favicon.ico 解决了这个问题 :)

为了使这个答案更普遍,问题是肯定的,验证码是由于某种原因重新生成的。

于 2013-08-06T08:24:34.440 回答
0

我找到了一个不完美但有效的解决方案。我在我的表单中添加了一个隐藏的输入,其中包含这样的正确代码:

<input type="hidden" name="hashCode" value=<?php echo "'" . md5($_SESSION['captcha']['code']) . "'" ?>> 

然后我执行检查:

if( md5(strtoupper($_POST['captchaCode'])) === $_POST['hashCode'] )

现在它也适用于 Chrome。但我仍然想知道为什么在 Chrome 中提交表单后会$_SESSION['captcha']['code']发生更改。

于 2013-06-02T16:04:36.757 回答
0

我遇到了同样的问题,在我的情况下,Chrome 中安装的 adBlocker 扩展阻止了验证码的呈现。我正在使用Ghostery。

尝试禁用您已安装的所有广告拦截器。

于 2019-01-06T16:19:47.253 回答