发布网友 发布时间:2022-04-28 07:37
共5个回答
懂视网 时间:2022-04-28 11:58
php中session验证码不同步的解决办法:
验证码生成页面:
for($i=0;$i<4;$i++){ $y = mt_rand(3,10); $size = mt_rand(5,8); $ran = dechex(rand(0,15)); imagestring($im,$size,(2+$i*15),$y,$ran,imagecolorallocate($im,rand(0,100),rand(0,150),rand(0,200))); $yzm.=$ran; } $_SESSION['yzm']=$yzm;
登录页面:
<input type="text" value="">
红色代码为了检测是否能够正确获得图片中的验证码,但是在测试中,我发现我多次一举了。
因为每次刷新这个页面之后显示的都是上一次的内容。最后网上查阅了一番发现,session
变量,设置之后是需要刷新页面才会生效的。
我们在登录页面是首次引入yzm.php
页面。没有刷新页面。所以当前用$_SESSION
是获取不到的,当我们刷新这个页面的时候,获取到的是上一次的session值,
为了测试猜想是否正确。登录页面设置一个表单提交路径。链接的页面为:
session_start(); echo $_SESSION['yzm'];
结果符合。
相关学习推荐:PHP编程从入门到精通
热心网友 时间:2022-04-28 09:06
你这个验证码的图片都是错的。。,先要有个好的验证码图片才能验证啊
yzm.php
<?php
//生成验证码图片
session_start();
Header("Content-type: image/gif");
srand((double)microtime()*1000000);
$im = imagecreate(50,25);//设置图片的宽与高
$black = ImageColorAllocate($im, 0,0,0);//设置背景颜色
$white = ImageColorAllocate($im, 255,255,255);//设置文字颜色
$gray = ImageColorAllocate($im, 200,200,200);//干扰颜色
imagefill($im,50,25,$gray);
while(($chk_num=rand()%10000)<1000);
$_SESSION["chk_num"] = $chk_num;
//将四位整数验证码绘入图片
imagestring($im, 15, 5, 1,$chk_num , $white);//5, 5, 1分别表示为字体大小,左边距,上边距
for($i=0;$i<100;$i++) //加入干扰象素
{
imagesetpixel($im, rand()%70 , rand()%30 , $gray);
}
ImagePNG($im);
ImageDestroy($im);
?>
yanzhengma.php
<html>
<head>
<title>验证码判断</title>
</head>
<body>
<form method="post" action="yanzhengma.php">
<h3><span>我要评价:</span></h3>
<input type="hidden" name="guestbook[username]" id="guestbook[username]" value="{$title}" />
<input type="hidden" value="{$contentid}" name="guestbook[title]" id="guestbook[title]"/>
<textarea name="guestbook[content]" cols="80" rows="7" class="text" id="contentid"></textarea><br>
请输入验证码:<input type="text" name="yzm" id="yzm" >
<img src="yzm.php" id="checkcode" onClick="this.src='yzm.php?id='+Math.random()*5;" style="cursor:pointer;" alt="验证码,看不清楚?请点击刷新验证码" align="absmiddle"/><br>
<input type="submit" name="dosubmit" value="提交"/>
<input type="reset" value="重置"/>
<?php
error_reporting(0);
session_start();
if (isset($_POST['dosubmit']))
{
if ($_POST['yzm'] == $_SESSION["chk_num"])
{
echo "<br>"."验证码正确";
}
else
{
echo "<br>"."验证码错误";
}
}
?>
</form>
</body>
</html>
这是个验证的实例,是好的,你可以看看追问我的问题是在a.php页面生成的session和生成的图片不一致,session总是比图片显示的慢一拍,图片是可以正确输出的。。。
追答我在我机上测试图片不能显示
热心网友 时间:2022-04-28 10:24
缓存问题,每次获取a.php页面时都要传一个随机数过去,保证每次获取的a.php页面不是缓存后的。location.href="a.php?rand="+Math.random();追问能在说的详细点吗?
热心网友 时间:2022-04-28 11:59
你这验证码不好 ,不要用这个.直接是网站下个 jQ 的验证码吧
热心网友 时间:2022-04-28 13:50
$_SESSION["code"] = $str; 放到前面。追问这句放前面的效果是一样的,还是慢了一拍