php验证码会话不会更新

时间:2013-01-05 14:32:30

标签: php session captcha

我有这段代码:

captcha.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代码,而不是显示的当前代码。

我该怎么办?

2 个答案:

答案 0 :(得分: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时才会写入新值,这在主页加载后发生,因此新的会话值当时不可用。所以其他一切都运转正常。

答案 1 :(得分:0)

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

<iframe src="includes/captcha.php?<?php echo microtime();?>" 
frameborder="0" height="65" width="180"></iframe>