字体:  

图片验证码里的$_SESSION变量问题

ae96if 发表于: 2008-8-19 18:23 来源: PHPChina 开源社区门户

页面1:yzm.php
<?php
session_start();  
srand((double)microtime()*1000000);
$im=imagecreate(45,18);
$black=imagecolorallocate($im,0,0,0);
$white=imagecolorallocate($im,255,255,255);
$gray=imagecolorallocate($im,200,200,200);
imagefill($im,0,0,$gray);
for($i=0;$i<4;$i++){
  $str=mt_rand(1,3);  //产生1到3的随机数,指定验证码字体
  $size=mt_rand(3,6); //用来产生3到6的随机数,指定每位验证码数字的高度
  $authnum=mt_rand(0,9); //产生0到9的随机数,用来显示验证码数字
  $num.=$authnum;
  imagestring($im,$size,(5+$i*10),$str,$authnum,imagecolorallocate($im,rand(0,130),rand(0,130),rand(0,130)));  
}
for($i=0;$i<200;$i++){
  $randcolor=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
  imagesetpixel($im,rand()%70,rand()%30,$randcolor);
}

imagepng($im);
imagedestroy($im);
$_SESSION['autonum']=$num;
?>

页面2:test.php
<?php
session_start();
?>
<img src="yzm.php">
<?
echo "当前值为".$_SESSION['autonum'];
?>


问题:执行test.php,输出图片,之后输出$_session['autonum']的值,按理应该相等才是的,却总是不相等。比如第一次输出,显示图片验证码,之后为空值。第二次执行,显示图片码,之后为上一次显示的图片验证码。也就是说,总是不能同步。不解……

最新回复

guofang at 2008-8-19 20:01:25
你这个问题我以前也遇到过,test.php页面在载入的时候下面的$_SESSION['autonum']总是优先于图片验证码的赋值,所以第一次输出为空,以后每次输出都是前一个验证码。你不要在生成验证码的test.php页面去验证,在提交后的下一个页面去验证。试一下吧
再者,如果你用了xajax去验证的话,更要留心验证码的同步问题了
心痛 at 2008-8-20 09:16:02
你想想两个页面的执行顺序
当你执行test.php的时候,已经执行了echo "当前值为".$_SESSION['autonum'];
此时,验证码还没有生成,SESSION肯定是为空值。随后才是执行生成验证码,当然是不对的~
xu33 at 2008-8-20 10:43:04
LZ,不同步才是正常的,同步了才不正常哇!
naodai at 2008-8-30 00:19:48
顶起来!
我的也是一样的
webren at 2008-8-30 00:25:45
不要在同一个页面验证