这是代码:
nt number1;
        int number2;
        char code;
        string checkCode = String.Empty;
        Random random = new Random();
        for (int i = 0; i < 4; i++)
        {
            number1 = random.Next(0, 2);
            if (number1 == 1)
            {
                number2 = random.Next();
                code = (char)('A' + (char)(number2 % 26));
                checkCode += code.ToString();
            }
            else
            {
                number2 = random.Next();
                code = (char)('0' + (char)(number2 % 10));
                checkCode += code.ToString();
            }
           
            
        }
        Session["checkCode"] = checkCode;
        
         Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
        return checkCode;    }
    private void CreateCheckCodeImage(string checkCode)
    {
        
        if (checkCode == null || checkCode.Trim() == string.Empty)
        
            return;
         Bitmap image =new Bitmap ((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
            Graphics g=Graphics.FromImage(image);
            try{
                Random random=new Random();
                g.Clear(Color.White);
                for(int i=0;i<2;i++)
                {
                    int x1=random.Next(image.Width);
                    int x2=random.Next(image.Width);
                    int y1=random.Next(image.Height);
                    int y2=random.Next(image.Height);
                    g.DrawLine(new Pen(Color.Black),x1,y1,x2,y2);
                }
                Font font=new Font("Arial",12,(FontStyle.Bold));
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
                g.DrawString(checkCode,font,brush,2,2);
                for(int i=0;i<100;i++)
                {
                    int x = random.Next(image.Width);
                    int y = random.Next(image.Height);
                    image.SetPixel(x, y, Color.FromArgb(random.Next()));                }
                g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
                MemoryStream ms=new MemoryStream();
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                Response.ClearContent();
                Response.ContentType="image/gif";
                Response.BinaryWrite(ms.ToArray());
                          }
            finally{
            g.Dispose();
             image.Dispose();
            }
        }
    

解决方案 »

  1.   

      for (int i = 0; i < 4; i++)
            {
                number1 = random.Next(0, 2);
                if (number1 == 1)
                {
                    number2 = random.Next();
                    code = (char)('A' + (char)(number2 % 26));
                    checkCode += code.ToString();
                }
                else
                {
                    number2 = random.Next();
                    code = (char)('0' + (char)(number2 % 10));
                    checkCode += code.ToString();
                }
               
                
            }
            Session["checkCode"] = checkCode;
    你这个Session已经放到for循环外面了,不是一直是第一个,而是checkCode这个值都没有改变过!
      

  2.   

    没说清楚,我是做一个字母加数字验证码,用其他的页面调用随机生成验证码页面,用session来获取验证码字符串,我将session获取的值与生成的验证码在一个页面上一起显示的时候,session第一次是空的,之后显示的一直是前一个验证码的值
      

  3.   

    就是session与验证码不一样,session 显示的值总是慢一步
      

  4.   

    你调用完session在把它释放掉,看看行不行。
      

  5.   

                Response.Clear();
                Response.ContentType = "image/Gif";            Response.Buffer = false;
                Response.ExpiresAbsolute = System.DateTime.Now.AddYears(-10);
                Response.Expires = 0;
                Response.CacheControl = "no-cache";            Response.BinaryWrite(bytes);告诉浏览器不要缓存图片~
      

  6.   

    string checkCode = GenCode(4);
    Session["checkCode"] = checkCode;/// <summary>
        /// 产生随机字符串
        /// </summary>
        /// <param name="num">随机出几个字符</param>
        /// <returns>随机出的字符串</returns>
        private string GenCode(int num)
        {
            string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//"的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严";
            char[] chastr = str.ToCharArray();
            // string[] source ={ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "#", "$", "%", "&", "@" };
            string code = "";
            Random rd = new Random();
            int i;
            for (i = 0; i < num; i++)
            {
                //code += source[rd.Next(0, source.Length)];
                code += str.Substring(rd.Next(0, str.Length), 1);
            }
            return code;    }
      

  7.   


    你在比如<img src = "xx.ashx" />,你要请求了才有值
    第一次,浏览器发出请求,构造页面HTML的时候session为空,发送HTML到浏览器,浏览器显示HTML,发现有IMG标签,再次请求图片,得到session,页面显示session为空,原因为HTML在前次请求就生成了,那次session为空。
    第二次,解析的是第一次的IMGsession。
    就是这样