【发布时间】:2015-06-27 01:38:28
【问题描述】:
有时,当我刷新包含验证码图像的页面时,验证码图像会加载新字符串,但包含验证码刺痛的session 不会更新!
例如,首先,我的验证码图片显示abcde。接下来,我刷新页面,验证码图像将vwxyz 显示为新的验证码,并且定期将$_SESSION['rand_code'] 的值替换为
vwxyz。但是$_SESSION['rand_code'] 具有相同的值abcde
注意:这个问题有 10% 发生。
catpcha.php:
<?php
if(!session_id() || session_id() == ''){ // i used this because i have started a session before
session_start();
}
$string = '';
for ($i = 0; $i < 5; $i++) {
$string .= chr(mt_rand(97, 122));
}
$_SESSION['rand_code'] = $string;
$dir = 'fonts/';
$image = imagecreatetruecolor(80, 29);
$black = imagecolorallocate($image, 0, 0, 0);
$color = imagecolorallocate($image, 0, 100, 90); // red
$white = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image,0,0,299,99,$white);
imagettftext ($image, 21, 8, 16, 23, $color, $dir."Havana.ttf", $_SESSION['rand_code']);
header("Content-type: image/png");
imagepng($image);
?>
调用验证码图片:
<img src="captcha.php?e=<?php echo time() ?>">
【问题讨论】:
-
你如何确定会话值是错误的?
-
当你做
if(!session_id() || session_id() == ''){时它会失败,因为有一个会话ID。所以你的会话永远不会开始,你不能对会话应用值。打开错误报告以查看此内容。 -
实际上@Ohgodwhy 提出了一个非常有效的观点。接得好!删除
if(!session_id() || session_id() == '')应该可以解决您的问题。 -
@cmorrissey :
echo $_SESSION['rand_code'] -
@Ohgodwhy : 这就是为什么我之前已经开始了一个会话来检查用户登录