2

我有这个代码:

验证码.php:

session_start();
class Captcha {
    protected $code;
    protected $width = 35;
    protected $height = 150;

    function __construct() { 
        $this->code = substr(sha1(mt_rand()), 17, 6); 
        $_SESSION['captcha'] = $this->code;
    }

    function getCode(){
        return $this->code;
    }

    function showImage() {
             // here comes the code that builds the image.
             // it works fine!

    }
}


$image = new Captcha();

$image->showImage();

在我的登录表单中,我有:

<iframe src="includes/captcha.php" frameborder="0" height="65" width="180"></iframe>

如果我print_r($_SESSION)$_SESSION['captcha']总是延迟:它包含以前的captcha代码,而不是正在显示的当前代码。

我应该怎么办?

4

2 回答 2

2
<iframe src="includes/captcha.php" frameborder="0" height="65" width="180"></iframe>

应该:

<img src='includes/captcha.php' style='height:65px;width:180px' />

因为您应该将图像加载为图像而不是 iframe。

此外,如果在父页面上打印出您的 CAPTCHA 代码,则始终是旧值,因为新值仅在captcha.php加载主页面后才写入,因此当时新的会话值不可用。所以一切正常。

于 2013-01-05T14:44:54.540 回答
0

这是由于浏览器的缓存,因此您必须执行以下操作:

<iframe src="includes/captcha.php?<?php echo microtime();?>" 
frameborder="0" height="65" width="180"></iframe>
于 2013-01-05T14:56:36.093 回答