本帖最后由 mclubing 于 2012-06-14 16:13:53 编辑

解决方案 »

  1.   

    真有意思,楼主这脑子把自己绕糊涂了吧。你这个网页要session干什么?验证码图片里有做SESSION,提交表单的页面用SESSION,你在这个页面里放个SESSION是想证明你一脑子浆糊吗。
      

  2.   

    不管楼主想有什么需求吧,先看看问题while(($authnum=rand()%100000)<10000);
        $_SESSION['authnum']=$authnum;
    这就说明SESSION变量的赋值是有条件的,当你产生的随机数不满足条件时,authnum还是上一次保存下来的,但后面的代码依旧输出,所以输出的肯定不会同步。
      

  3.   

    运行先后的问题。每次刷新取的都是上一次的 $authnum 自己琢磨就明白了。
      

  4.   

    明白楼主的意思了。
    //  楼主是不是理解为
      <td><input id="checkimg" name="checkcode" onkeyup="check()" style="width:60px"><img alt="点击可刷新" style="cursor:pointer; position:absolute; top:35%; left:55%;" src="checkcode.php" onClick="this.src='checkcode.php'+'?a'+'='+new Date().getTime()"></img></td>//此td先执行,那么肯定session 也改变了。然后
      <?php echo $_SESSION['authnum'];//这里的输出老慢一拍 ?>
    //上面session肯定也是td里的session
    //------------------------------------------------------
    //其实你可以做个测试,按你的理解,td上面放 echo session和下面放 echo session 肯定是不一样的//那么你在td上面也放一个,看看他们是否不一致。
    <?php echo $_SESSION['authnum'];//这里的输出老慢一拍 ?>
      

  5.   

    前端代码
        session_start();//取得 session 变量值
    ....
    echo $_SESSION['authnum'];//这里输出的是上面取到的
    这个工作是在整个前端代码未到达浏览器时就已经完成了

    <img alt="点击可刷新" style="cursor:pointer; position:absolute; top:35%; left:55%;" src="checkcode.php" onClick="this.src='checkcode.php'+'?a'+'='+new Date().getTime()"></img>
    中的 checkcode.php 是在浏览器读取图片时才访问的
    很明显,checkcode.php 中产生的 session 数据要晚于你在页面显示的
      

  6.   

    我原来也碰过这个问题,后来解决了,但是不记得是改了哪里。生成验证码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);?>前台
    <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>
    楼主可以对照一下,看下问题在哪里
      

  7.   

    我已经知道错在哪,但是我不知道怎么解决,错误原因是因为browser先加载完成html代码,然后再加载图片,所以会出现慢图片一拍的原因,因为图片是在session后面加载的.
      

  8.   

    就是会慢一拍,是用错了,如果验证码在html页面中引用,而此时又用php输出,那么页面的就比php输出的快,这是用错了,
    if($_SERVER["REQUEST_METHOD"] == "POST")
    {
      
      echo "提交到服务器了" .$_SESSION["VerifyCode"] ."这是填写的".$_POST["getcode"];

    这样就同步了,是html的验证码,和回发后的session相同。验证是否两者相等,这才对