首页上一页 1 下一页尾页 1 条记录 1/1页
session问题
发表在PHP图书答疑
2010-08-24
是否精华
是
否
版块置顶:
是
否
今天碰到了一个奇怪的问题:平时验证码的代码用得好好的,然后重装服务器后,就出现了这样的问题:可以刷新验证码,可从第二个页面取出的验证码却不一致,都是首次进入注册页面时的验证码,举个例子:首次进入该网站的注册页面,然后第一次生成的验证码是8810,点看“看不清楚”刷新一次验证码为3602,如果输入3602提交注册的话,它会提示验证码出错,如果输入8810的话就可以成功注册了。不知道是不是配置的原因。我把生成验证码的文件上传和页面打印验证码的代码贴出来,明日的老师有空帮我看一下
<?php
/*code by borlandapple 2009.3.27 */
$w = 80; //设置图片宽和高
$h = 26;
$str = Array(); //用来存储随机码
$string = "0123456789";//随机挑选其中4个字符,也可以选择更多,注意循环的时候加上,宽度适当调整
for($i = 0;$i < 4;$i++){
$str[$i] = $string[rand(0,9)];
$vcode .= $str[$i];
}
session_start(); //启用超全局变量session
$_SESSION["vcode"] = $vcode;
$im = imagecreatetruecolor($w,$h);
$white = imagecolorallocate($im,255,255,255); //第一次调用设置背景色
$black = imagecolorallocate($im,0,0,0); //边框颜色
imagefilledrectangle($im,0,0,$w,$h,$white); //画一矩形填充
imagerectangle($im,0,0,$w-1,$h-1,$black); //画一矩形框
//生成雪花背景
for($i = 1;$i < 200;$i++){
$x = mt_rand(1,$w-9);
$y = mt_rand(1,$h-9);
$color = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagechar($im,1,$x,$y,"*",$color);
}
//将验证码写入图案
for($i = 0;$i < count($str);$i++){
$x = 13 + $i * ($w - 15)/4;
$y = mt_rand(3,$h / 3);
$color = imagecolorallocate($im,mt_rand(0,225),mt_rand(0,150),mt_rand(0,225));
imagechar($im,5,$x,$y,$str[$i],$color);
}
header("Content-type:image/jpeg"); //以jpeg格式输出,注意上面不能输出任何字符,否则出错
imagejpeg($im);
imagedestroy($im);
?>
取出页面
<?php
session_start();
echo($_SESSION["vcode"]);/*排印出来的验证码跟上面代码生成的验证码不一致(注:以前是能正常使用的)*/
?>
可能是我没有把情况说得明白,我再描述一下:
除了以上这种情况外,也出现了下面这种情况,管理员成功登录时把权限配置的参数$_SESSION["Power"]="info|new|"保存到session里面,然后在后台的其它页面检测时,发现保存到session信息丢失了一部分(现在的值是:$_SESSION["Power"]="new|",测试结果sessionid都是同一个的),注意,不是完全丢失。这就是我碰到的问题,服务器配置是window2003+IIS6+MYSQL5.0。
如果把代码放在本地测试(采用帝国网站系统的服务)一切都是正常的。所以我怀疑是服务器的配置问题,麻烦老师再解答 一下,谢谢啦!
<?php
/*code by borlandapple 2009.3.27 */
$w = 80; //设置图片宽和高
$h = 26;
$str = Array(); //用来存储随机码
$string = "0123456789";//随机挑选其中4个字符,也可以选择更多,注意循环的时候加上,宽度适当调整
for($i = 0;$i < 4;$i++){
$str[$i] = $string[rand(0,9)];
$vcode .= $str[$i];
}
session_start(); //启用超全局变量session
$_SESSION["vcode"] = $vcode;
$im = imagecreatetruecolor($w,$h);
$white = imagecolorallocate($im,255,255,255); //第一次调用设置背景色
$black = imagecolorallocate($im,0,0,0); //边框颜色
imagefilledrectangle($im,0,0,$w,$h,$white); //画一矩形填充
imagerectangle($im,0,0,$w-1,$h-1,$black); //画一矩形框
//生成雪花背景
for($i = 1;$i < 200;$i++){
$x = mt_rand(1,$w-9);
$y = mt_rand(1,$h-9);
$color = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagechar($im,1,$x,$y,"*",$color);
}
//将验证码写入图案
for($i = 0;$i < count($str);$i++){
$x = 13 + $i * ($w - 15)/4;
$y = mt_rand(3,$h / 3);
$color = imagecolorallocate($im,mt_rand(0,225),mt_rand(0,150),mt_rand(0,225));
imagechar($im,5,$x,$y,$str[$i],$color);
}
header("Content-type:image/jpeg"); //以jpeg格式输出,注意上面不能输出任何字符,否则出错
imagejpeg($im);
imagedestroy($im);
?>
取出页面
<?php
session_start();
echo($_SESSION["vcode"]);/*排印出来的验证码跟上面代码生成的验证码不一致(注:以前是能正常使用的)*/
?>
可能是我没有把情况说得明白,我再描述一下:
除了以上这种情况外,也出现了下面这种情况,管理员成功登录时把权限配置的参数$_SESSION["Power"]="info|new|"保存到session里面,然后在后台的其它页面检测时,发现保存到session信息丢失了一部分(现在的值是:$_SESSION["Power"]="new|",测试结果sessionid都是同一个的),注意,不是完全丢失。这就是我碰到的问题,服务器配置是window2003+IIS6+MYSQL5.0。
如果把代码放在本地测试(采用帝国网站系统的服务)一切都是正常的。所以我怀疑是服务器的配置问题,麻烦老师再解答 一下,谢谢啦!