关于生成验证码的,首先看生成页,这一页基本上是照搬的。没动。$w = 80; 
$h = 26;
$str = Array(); 
$string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
for($i = 0;$i < 4;$i++){
   $str[$i] = $string[rand(0,35)];
   $vcode .= $str[$i];
}
session_start();
session_register("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"); 
imagejpeg($im);
imagedestroy($im);展示与验证在同一页代码如下<?php
session_start();
if (isset($vcode) && isset($_GET["vcodes"]))
{
echo $vcode;
echo $_GET["vcodes"];
if($_SESSION["vcode"]==$_GET["vcodes"])
{}
else
{echo '验证码错误';}
}
?>
<img src="plugins/verifycode.php" style="cursor:pointer;" onclick="this.src='plugins/verifycode.php?t='+Math.random()+'';" title="点击换一个" >我说下,这个$vcode是验证码的正确值session传递,$vcodes是页面表单传过来的。现在的问题是
为什么我点击图片更换了验证码$vcode的值都不变呢?只有重新开启浏览器才会改变。验证码图片正常变化。是不是倒地时那儿的问题呢?

解决方案 »

  1.   

    改成下面的这个试试
    <img src="plugins/verifycode.php" style="cursor:pointer;" onclick="this.setAttribute(src,'plugins/verifycode.php?'+Math.random());" title="点击换一个" >
      

  2.   

    还是没有用呢,验证码图片可以变,$vcode就是不变。。
      

  3.   

    展示与验证在同一页代码 是你全部的代码吗?
    把session_register("vcode");换成$_SESSION['vcode'] = $vcode;试下
      

  4.   

    哦,把你的问题看错了$vcode没变,是因为你没有用$_SESSION来传递$vcode
    在验证码页
    <?php
    session_start(); // 放到最前面
    $w = 80;
    $h = 26;
    $str = Array();
    $string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    for($i = 0;$i < 4;$i++){
    $str[$i] = $string[rand(0,35)];
    $vcode .= $str[$i];
    }
    $_SESSION['vcode'] = $vcode; // 注册到session
    $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");
    imagejpeg($im);
    imagedestroy($im);
    ?>显示验证页
    <?php
    session_start();
    if (isset($_SESSION["vcode"]) && isset($_GET["vcodes"])){ //这里的判断条件
    echo $_SESSION["vcode"];
    echo $_GET["vcodes"];
    if($_SESSION["vcode"]==$_GET["vcodes"]){

    }else{
    echo '验证码错误';
    }
    }
    ?>
    <img src="plugins/verifycode.php" style="cursor:pointer;" onclick="this.setAttribute(src,'plugins/verifycode.php?'+Math.random());" title="点击换一个" >