我在表单中使用 Simple PHP Captcha ,它在Firefox,Opera和IE中运行良好,但在Chrome中运行不正常。图像加载正常,我能够传递验证码,但是当我尝试检查它时它会失败:
if( $_POST['CaptchaCode'] === $_SESSION['captcha']['code'] )
当我echo $_POST['CaptchaCode']
时,我得到了我输入的正确代码,但是当我echo $_SESSION['captcha']['code']
时,我得到的代码与我在验证码中看到的代码不同。它看起来像是新生成的。
提前致谢。
答案 0 :(得分:1)
我遇到了同样的问题。 “Simple PHP Captcha”不仅仅适用于Chrome。
我的情况可能非常具体,但可能会有所帮助。首先,您需要知道:
favicon.ico
部分声明任何图标,Google Chrome也会查找<head>
。在这种情况下,Chrome会查看根目录(/favicon.ico
)。剩下的很明显:)在我的服务器上没有图标,所以我的“联系我们”页面加载了一个CAPTCHA图像,但另外谷歌发送了一个请求favicon.ico,我的服务器返回404错误页面,其中还包含与CAPTCHA的联系表格,该表格重新填写了$_SESSION
中的代码。
所以我只需添加一个favicon.ico来解决这个问题:)
为了使这个答案更加通用,问题是肯定的,CAPTCHA代码会因某种原因而重新生成。
答案 1 :(得分: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']
后会发生变化。
答案 2 :(得分:0)
我也遇到过同样的问题,就我而言,这是因为Chrome中安装的adBlocker扩展程序阻止了Captcha的呈现。 我正在使用Ghostery。
尝试禁用所有已安装的广告拦截器。