验证码不工作在chrome浏览器


Captcha does not work in chrome

我使用简单的PHP验证码的形式,它在Firefox, Opera和IE工作良好,但不是在Chrome。图像加载良好,我能够通过验证码,但当我尝试检查它时,它失败了,像这样:

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

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

我也遇到了同样的问题。"简单的PHP验证码"仅在Chrome中不起作用。

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

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

其余的很明显:)在我的服务器上没有favicon,所以我的"联系我们"页面加载了一个CAPTCHA图像,但另外谷歌发送了一个请求favicon.ico,我的服务器返回404错误页面,其中也包含了CAPTCHA的联系表单,在$_SESSION中重写了代码。

所以我简单地通过添加favicon.ico来解决这个问题:)

为了使这个答案更通用,问题是肯定的,CAPTCHA代码由于某种原因重新生成。

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

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

,然后执行检查:

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

现在它也在Chrome中工作。但我仍然想知道为什么在Chrome中提交表单后$_SESSION['captcha']['code']的变化。

我也遇到过同样的问题,在我的情况下,是安装在Chrome中的adBlocker扩展阻止了Captcha的呈现。我用的是Ghostery

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