<?php
// 生成验证码图片
        $img_width = 60; //图片宽度
        $img_height = 20;//图片长度
        $ix = 6; //文字离右边距离
        $iy = 2; //文字离上边距离
        $stuff = '123456789ABDEFGHJKLMNPRSTUVWXY';//附加码显示范围ABCDEFGHIJKLMNOPQRSTUVWXYZ
        $v_num = 4; //附加码长度
        $b = array('0','0','0'); //图片背景色数值范围0-255
        $s = array(255,rand(0,255),rand(0,255)); //图片文字颜色
        $distance = 14; //字体距离
        $x = 80; //杂点数量;
        $number = createRandomStr($v_num,$stuff);
        $number_len = strlen($number);
        $ivalidate = md5(md5($number).CC);
        session_start();
        $_SESSION["ivalidate"] = $ivalidate;
        setcookie("validate",$ivalidate);
        setcookie('b','bb');
        $img = imageCreate($img_width, $img_height);
        ImageColorAllocate($img,$b[0], $b[1], $b[2]);
        $white = ImageColorAllocate($img,$s[0],$s[1],$s[2]);
        for ($i = 0; $i < $number_len; $i++) {
            imageString($img, 5,$ix, $iy, $number[$i], $white);
            $ix += $distance;
        }
        for($i=0;$i<$x;$i++)   //加入干扰象素
        {
            $randcolor = ImageColorallocate($img,$s[0],$s[1],$s[2]);
            imagesetpixel($img, rand(0,$img_width) , rand(0,$img_height) , $randcolor);
        }
   
    //随机生成验证码
         function createRandomStr($strLen,$stuff)
         {
          list($usec, $sec) = explode(' ', microtime());
                (float) $sec + ((float) $usec * 100000);
          $number = '';
          $number_len = $strLen;
          $stuff_len = strlen($stuff) - 1;
          for ($i = 0; $i < $number_len; $i++) {
          $number .= substr($stuff, mt_rand(0, $stuff_len), 1);
          }
          return $number;
         }
          // 输出图片
    header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG));
    imagepng($img);
    imagedestroy($img);?>

解决方案 »

  1.   

    哪位兄弟帮忙调试,看看能获得cookie的值吗?
      

  2.   

    session是没问题的,我想用cookie试试结果不行,不知道为什么?
      

  3.   

    session是保存在服务器端的 而cookie是保存在客户端的如果你只采用cookie那么验证码并不在服务器有保存,那么从客户端输入验证码后你拿什么做比对验证呢?
    所以仅仅用cookie是没法达到验证目的的。还是用session吧,也安全些。
      

  4.   

     setcookie("validate",$ivalidate);
      setcookie('b','bb');这段代码改为:  $_COOKIE['validate']=$ivalidate;
      $_COOKIE['b']='bb';
      
      

  5.   

    如果要用cookie,需要把随机数保存下来。比如数据库。
      

  6.   


    设置的cookie是经过加密过的,提交过来的验证码 加密下和cookie看是否一样就可以了。关键是我设置cookie得不到。不知道问题出在哪。
      

  7.   

    setcookie(name,value,expire,domain) 
    加上有效期expire
      

  8.   

    验证码是验证客户端, 用cookie放客户端不安全
      

  9.   

    setcookie(name,value,expire,path,domain) 
    加上path呢,你使用访问cookie的页和这个生成验证码的页在不在同一目录
      

  10.   


    不再同一目录,但是我用其它不是生成png图片的php文件设置COOKIE后是可以读取的。