我使用简单的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
尝试禁用所有已安装的广告拦截器