2

私はこのコードを持っています:

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>

Iprint_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 に答える