我正在使用以下代码在我的网站上创建验证码,但是当我尝试从会话中读取值时,它始终是之前的验证码值。
<?php
session_start();
$captchaStr = md5(microtime() * mktime());
$captchaStr = substr($captchaStr,0,5);
$_SESSION["captcha"] = $captchaStr;
$captcha = imagecreatefrompng("../images/captcha.png");
$black = imagecolorallocate($captcha, 154, 32, 242);
$line = imagecolorallocate($captcha, 233, 239, 239);
// Draw lines
imageline($captcha, 0, 0, 39, 29, $line);
imageline($captcha, 40, 0, 64, 29, $line);
// Add captcha text
imagestring($captcha, 5, 20, 10, $_SESSION["captcha"], $black);
header("Content-type: image/png");
imagepng($captcha);
?>
有没有人知道为什么会这样以及如何修复它?
干杯
答案 0 :(得分:3)
我猜你试图从包含验证码值的页面读回验证码值,如下所示:
<?php session_start(); ?>
<img src="/lib/captcha.php" />
<?php echo "Captcha is: ", $_SESSION['captcha'] ?>
这永远不会奏效。 PHP默认锁定会话文件,因此在上述容器页面完成执行之前,您的验证码脚本无法运行。同样,由于验证码是作为单独调用获取的,因此用户的浏览器必须启动回服务器的回调以获取图像。这将需要几秒钟的完成时间,而容器页面将在几微秒内完成。
换句话说,在容器脚本完成之后,验证码生成器脚本很可能永远不会开始运行,这意味着容器脚本永远不会在会话文件中看到新的验证码字符串。