前台:<div style="text-align:center; float:left; width:560px">
       <input type="submit" value="提交" id="add" onclick="addmes('<%=Session["CheckCode"]%>')" />
        <input id="hidecheck" type="hidden" runat="server" />
    </div>js:function addmes(co) {
    FindCode(co);
    BeCheckCode();
}function FindCode(co) {
            document.getElementById("hidecheck").value = co;
        }function BeCheckCode() {
    var checkinput = document.getElementById("check").value;
    var checkoutput = document.getElementById("hidecheck").value;
    if (checkinput == "") {
        alert("请输入验证码!");
        innerCheck();
    }
    else {
        if (checkinput == checkoutput) {
            window.location = "../shows/index.aspx";
        }
        else {
            alert("验证码错误!");
            document.getElementById("check").value = "";
            innerCheck();
        }
    }
}验证码:
  protected void Page_Load(object sender, EventArgs e)
        {
            Response.Cache.SetNoStore();
            CreateCheckCodeImage(GenerateCheckCode());
        }        private string GenerateCheckCode()
        {
            //定义验证码长度
            int CODELENGTH = 4;
            int number;
            string RandomCode = string.Empty;
            Random r = new Random();
            for (int i = 0; i < CODELENGTH; i++)
            {
                number = r.Next();
                //字符从0~9, A~Z中随机产生,对应的ASCII码分别为48~57, 65~90 a-z 97~122
                number = number % 36;
                if (number < 10)
                    number += 48;
                else
                    number += 87;
                RandomCode += ((char)number).ToString();
            }
            //在Cookie中保存验证码
            Session["CheckCode"] = RandomCode;
            Response.Cookies.Add(new HttpCookie("CheckCode", RandomCode));
            return RandomCode;
        }

解决方案 »

  1.   

    先不说你的程序正确与否,可能你连使用验证码的意图都没有弄清楚。验证码通常是为了防止用户使用程序模拟提交,因为从图片中要解析出文字来还是有些难度的。可是你的程序是这样写的:
    <input type="submit" value="提交" id="add" onclick="addmes('<%=Session["CheckCode"]%>')" />
    那简单的分析字串就可以知道验证码是什么字符,还有,在客户端验证验证码是否正确,有意义吗?用程序来提交是不会执行这些 JS 验证的。所以,这种验证码没有任何意义。
    验证码的验证必须在服务器上,你可以将验证码代表的字串放在隐藏域或 cookie 中,但一定要加密,然后在服务器端验证就可以,不用 Session,也就不会存在与 Session 不同步的问题。