验证码不适用于镀铬

时间:2013-06-02 15:00:28

标签: php google-chrome captcha

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

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

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

提前致谢。

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 “Simple PHP Captcha”不仅仅适用于Chrome。

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

  • 我的应用返回404错误页面,其中包含与CAPTCHA的联系表单。
  • 即使您未在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。

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