代码如下:
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>登录页面</title>
<%
          String ran = (String)session.getAttribute("yzm");
        %>
  <script type="text/javascript">
  function login()
  {
if(document.fuck.username.value=="")
{
alert("用户名不能为空!");
document.fuck.username.focus();
return false;
}
else if(document.fuck.password.value=="")
{
alert("密码不能为空!");
document.fuck.password.focus();
return false;
}
else if(document.fuck.yzm.value=="")
{
alert("验证码不能为空!");
document.fuck.yzm.focus();
return false;
}
else if(document.fuck.yzm.value!=<%=ran%>){ 
        alert("验证码不正确!"); 
        document.fuck.yzm.focus();
        return false; 
    }
else if(true==flag)
{
document.fuck.signup_submit.disabled=true;
}
else
{
return true;
}
  
  }
  function reloadImage(url)  
  {  
  document.yzm1.src = url+'?id='+Math.random();
   }
  </script>
</head><body>
<form action="Ex3_6_login_check.jsp" method="post" name="fuck">
<table width="438" height="554" border="1" align="center">
  <tr>
    <th height="361" background="grammer.jpg" scope="col">
    用户名:<input type="text" name="username" size="18" /><br />
    密&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="password" name="password" size="19" /><br />
    验证码:<input type="text" name="yzm" size="4" /><a href="JavaScript:reloadImage('yzm.jsp');"><img src="yzm.jsp" id="yzm1" name="yzm1" /></a><br />
    <input type="submit" value="登录" onclick="return login()" /><input type="reset" value="重置" />
    </th>
  </tr>
</table>
</form>
</body>
</html>

解决方案 »

  1.   

    你右键看一下页面源代码
    else if(document.fuck.yzm.value!=<%=ran%>){ //这一句中后面输出的值
    与那个验证码图片中的值是不是一样就知道了你要是每输出一次验证码图片,Session就会自动变化一次的话,那么,你当前页面中的两个值应该是不一样的。如果两个值是一样的,那么改为下面的试试
    else if(document.fuck.yzm.value!='<%=ran%>'){ 
      

  2.   

    就是 if(document.fuck.yzm.value!=<%=ran%>) 比较时少了引号。
    ran是字串内容,比较时应该加引号:
    if(document.fuck.yzm.value!='<%=ran%>') 
      

  3.   

    如果2楼的方法还不行,那就把ran再trim一下。
      

  4.   

    添加这样一句话
    var ran = <%=ran%>;
    然后再比较
    if ( document.fuck.yzm.value != ran)
      

  5.   

    值不同,也就是说你的验证码所用的Session是每次都自动生成的那就表单发送后,交给服务器端去执行验证。前端验证不了的。在服务器端就可以使用你那种
    String ran = (String)session.getAttribute("yzm");
    if(用户提交来的验证码的值!=ran){
    }
    这样的方式去验证了。在这里验证的应该是不会再刷新Session的
      

  6.   

    用cookie的话,原理上应该是可以的。就是生成验证码的随机数时,再写一个去cookie中只是即使可以这么做,因为cookie这东东是极度不安全的,可轻易伪造。也就失去了使用验证码的初衷了。不建议这么做就是了。