我有这段代码:
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
代码,而不是显示的当前代码。
我该怎么办?
答案 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>