明明输入的是正确的验证码,可是判断的却是错的怎么解决呀我在HTML上的验证码代码是这样的:
验证码: <input size="6" name="yanzhengma"   >
<img id="pic" border=1 src="img.jsp?Math.random();" onclick="return chk_image();" alt="30"> img.jsp的代码是这样的:
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
    Color getRandColor(int cc,int bb)
    {
        Random random = new Random();
        if(cc>255) cc=255;
        if(bb>255) bb=255;
        int r=cc+random.nextInt(bb-cc);
        int g=cc+random.nextInt(bb-cc);
        int b=cc+random.nextInt(bb-cc);
        return new Color(r,g,b);
    } //获取随机颜色%>
<%
    response.setHeader("Pragma","No-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setDateHeader("Expires", 0);
 
    int width=80; //定义验证码图片的长度
    int height=30; //定义验证码图片的宽度
    BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
 
    Graphics g = image.getGraphics();
 
    Random random = new Random();
 
    g.setColor(getRandColor(200,250));
    g.fillRect(0, 0, width, height);
 
    g.setFont(new Font("Times New Roman",Font.PLAIN,18));    //定义字体形式
 
    g.setColor(getRandColor(160,200));
    for (int i=0;i<155;i++)
    {
       int i_x = random.nextInt(width);
       int i_y = random.nextInt(height);
       int i_xl = random.nextInt(12);
       int i_yl = random.nextInt(12);
       g.drawLine(i_x,i_y,i_x+i_xl,i_y+i_yl);
    }    //用线条画背景
 
    String s_Rand="";
    for (int i=0;i<4;i++)
    {
       String rand=String.valueOf(random.nextInt(10));
       s_Rand+=rand;
      
       g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
       g.drawString(rand,13*i+6,16);
    }    //产生4位随机码 
 
    session.setAttribute("rand",s_Rand);    //将验证码存入Session中
 
    g.dispose();
   
    ImageIO.write(image, "JPEG", response.getOutputStream());    //输出验证图片
   
    out.clear();
    out = pageContext.pushBody();
   
%>
html上的JavaScript代码是这样的:
<script language="javascript">
<!--
function chk_image()
{
    var img = document.getElementById("pic");    
    img.src = "img.jsp?" + Math.random();    

function chk()
{
    var img = document.getElementById("pic");
//var rand = '<%=session.getAttribute("rand")%>';
if (frm.zhhao.value == "")
{
alert("请填写账号!")
}
else if (frm.pswd.value == "")
{
alert("请填写密码!")
}
else if (frm.pswd2.value == "")
{
alert("请再次填写密码!")
}
else if (frm.pswd.value != frm.pswd2.value)
{
alert("两次输入的密码不一样,请重输!")
}
else if (frm.namnam.value == "")
{
alert("请填写姓名!")
}
else if (frm.eml.value == "")
{
alert("请填写邮箱!")
}
else if (frm.eml.value.indexOf("@") == -1)
{
alert("请输入正确的邮箱地址!")
}
else if (frm.yanzhengma.value == "")
{
alert("请填写验证码!")
return chk_image();
}
else if (frm.yanzhengma.value != img)
{
alert("验证码输入错误,请重输!") 
return chk_image();

else
{
frm.submit();
}}
-->
</script>这个怎么办啊求助详解方法

解决方案 »

  1.   

    兄弟,最好不要用javascript来做验证码,这样系统在运行的时候是在客户端生成的html代码容易被拦截,这样很不安全,验证码一般都是用java类到底层去生成一个图片,然后再根据图片上面的验证码去匹配的,相关资料,自己到网上去查查,祝你学习愉快!
      

  2.   

    看看session中的验证码是否与图片的一致。最简单的就是在你的检查页面那里取出值,alert一下也好print一下也好。比对一下