【问题标题】:PHP and JavaScript: Reload captcha imagePHP 和 JavaScript:重新加载验证码图像
【发布时间】:2013-05-22 02:34:06
【问题描述】:

我用 PHP 制作了自己的验证码类,只是为了学习。没关系,按我的意愿工作。我试图添加一个“刷新图像”按钮,但我不知道该怎么做。

表格代码:

<p><img src="img.php" alt="Captcha!" /></p>

img.php 代码:

<?php
require_once 'captcha.class.php';
$captcha = Captcha::instance(10);
echo $captcha;
?>

__toString 方法:

public function __toString()
{
    ob_start();
    header('Content-Type: image/jpeg');
    imagejpeg($this->drawImage(), null, 100);
    return ob_get_flush();
}

这些代码将输出验证码。我怎样才能刷新这个图像? AJAX 中的东西会很棒! 谢谢。

【问题讨论】:

    标签: php javascript ajax captcha partial-page-refresh


    【解决方案1】:

    表单填写完成后,您如何检查验证码是否正确?会话变量?

    如果它是单个会话变量,您可以使用纯 JavaScript 刷新图像。在图像 url 的末尾添加一个随机查询字符串可以避免任何缓存问题。

    【讨论】:

      【解决方案2】:

      您能否让重新加载对创建新验证码的页面进行 AJAX 调用,并将新创建的结果返回到 DIV 中?

      【讨论】:

        【解决方案3】:
        <html>
        <head>
        <script type="text/javascript">
            function reload()
            {
                var img = new Image();
                img.src = 'img.php';
                var x = document.getElementById('captcha');
                x.src = img.src;
            }
        </script>
        </head>
        <body>
        <a href="javascript: reload()" >Reload</a>
        <img src="img.php" alt="Captcha!" id="captcha" />
        </body>
        </html>
        

        也许一个普通的x.src = 'img.php' 可以做到这一点,但只是为了确保它得到一个新的请求,我已经使用另一个图像(它也给你更多的搜索/学习)。

        【讨论】:

        • 我总是得到相同的图像。那么清理缓存呢?我会试试的,谢谢。
        • 不 shure 是否会纠正您的错误,但请确保您在过去从您的 class 输出图像时设置标题。像header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 这样的东西我想会成功
        • 您需要将其实际设置为不同的 URL,而不仅仅是不同的变量名(这是没有意义的)。我建议像'img.php?random=' + Math.random()
        • 或者,您可以将 img.src = 'img.php'; 更改为 img.src = 'img.php?rand=' + Math.random(); ,这样您就可以确保浏览器实际上不会向服务器发出请求,因为它与前一个 URL 完全不同(无需担心你是 php 中的任何 $_GET 值
        • 没办法,伙计!我已经尝试过了,但它不起作用。我仍然收到相同的图像。谢谢。
        猜你喜欢
        • 1970-01-01
        • 2016-01-11
        • 2012-12-17
        • 1970-01-01
        • 2016-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-07
        相关资源
        最近更新 更多