的index.php:
<?php
session_start();
?>
<img src='captcha.php' />
<?php
var_dump($_SESSION['vercode']);
unset($_SESSION['vercode']);
?>
captcha.php:
<?php
session_start();
$_SESSION["vercode"] = rand(10000,99999);
$image = imagecreatefromjpeg("img/bg.jpg");
$txtColor = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 5, 5, 5, $_SESSION["vercode"], $txtColor);
header("Content-type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
?>
在结果页面上,图像上的值不等于var_dump上的值。
请告知为什么他们不平等以及如何解决?
答案 0 :(得分:1)
这不起作用,因为index.php首先工作,captcha.php工作第二。
在index.php打印其会话变量时,还没有调用captcha.php。 Index.php输出字符串<img src='captcha.php' />
,但这只是一个字符串,而不是对captcha.php的调用。该字符串将进入浏览器,浏览器将在需要渲染图像时调用captcha.php。但是它会在index.php完成输出之后,因此它的会话变量不会受到影响。
要解决此问题,请将$_SESSION["vercode"] = rand(10000,99999);
添加到index.php中,而不是添加到captcha.php中。这样,captcha.php将从index.php准备的会话中读取vercode
,所有值都将匹配。
另外,请勿在索引中设置vercode
,因为在用户发送验证码答案时您无需检查。只有在您收到用户回答或生成新验证码之前,才能取消设置(重置)。
此外,如果您在同一index.php中收到用户答案,则在这种情况下您无需重置验证码。类似的东西:
if (!empty($_POST)) {
$vercode = $_SESSION["vercode"];
// process user input...
} else {
// reset vercode
$_SESSION["vercode"] = rand(10000,99999);
}
答案 1 :(得分:0)
只是为了让您的代码能够进行最少的更改(这不是什么,我会在生产中使用)并说明问题: 的index.php:
<?php
session_start();
$_SESSION["vercode"] = rand(10000,99999);
session_write_close();
?>
<img src='captcha.php' />
<?php
var_dump($_SESSION['vercode']);
unset($_SESSION['vercode']);
captcha.php:
<?php
session_start();
$image = imagecreatefromjpeg("img/bg.jpg");
$txtColor = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 5, 5, 5, $_SESSION["vercode"], $txtColor);
header("Content-type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
问题:您打开会话两次。因此,当生成captcha.php中的新随机数时,$ _SESSION [&#34; vercode&#34;]的值在index.php中不会更改,因为该变量未从会话文件刷新(为此您必须使用session_write_close)。 =&GT;您可以看到var_dump始终打印先前生成的随机数。
答案 2 :(得分:-1)
如果您正在尝试创建验证码,请尝试使用
<?php
$ranStr = md5(microtime());
$ranStr = substr($ranStr, 0, 6);
?>
<img src="scripts/captcha.php?df='<?php echo $ranStr; ?>'" alt="captcha" width="102" height="53" />
<input type="hidden" value="<?php echo $ranStr; ?>" name="cap" id="cap" />
这里是captcha.php
<?php
session_start();
$ranStr= ltrim($_REQUEST['df']);
$image = imagecreatefromjpeg("images/bg.jpg");
$txtColor = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 5, 5, 5, $ranStr, $txtColor);
header("Content-type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
?>