php 验证码 session不同步

发布网友 发布时间: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; 放到前面。追问这句放前面的效果是一样的,还是慢了一拍

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com