首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

asp.net扩展login控件时,图片验证码的有关问题

2012-01-15 
asp.net扩展login控件时,图片验证码的问题,对login控件进行扩展,加入图片验证码,第一次运行是正确的,然后

asp.net扩展login控件时,图片验证码的问题,
对login控件进行扩展,加入图片验证码,第一次运行是正确的,然后进入系统后   点注销,系统返回到login页面,这时图片显示不出来,只显示了alt的文字,各位有没有遇到过这问题,
其中验证码生成文件imageValidate.cs   中主要代码
public   partial   class   imageValidate   :   System.Web.UI.Page
{
        protected   void   Page_Load(object   sender,   EventArgs   e)
        {
                //生成4位的验证码
                /*string   tmp   =   RndNum(4);
                HttpCookie   cookie   =   new   HttpCookie( "ImageV ",   tmp);
                //Response.Cookies[ "ImageV "].Value=tmp;
                Response.Cookies.Add(cookie);
                this.ValidateCode(tmp);*/
                CreateCheckCodeImage(GenerateCheckCode());

        }

        private   string   GenerateCheckCode()
        {
                int   number;
                char   code;
                string   checkCode   =   String.Empty;

                System.Random   random   =   new   Random();

                for   (int   i   =   0;   i   <   5;   i++)
                {
                        number   =   random.Next();

                        if   (number   %   2   ==   0)
                                code   =   (char)( '0 '   +   (char)(number   %   10));
                        else
                                code   =   (char)( 'A '   +   (char)(number   %   26));

                        checkCode   +=   code.ToString();
                }

                Response.Cookies.Add(new   HttpCookie( "CheckCode ",   checkCode));

                return   checkCode;
        }

        private   void   CreateCheckCodeImage(string   checkCode)
        {
                if   (checkCode   ==   null   ||   checkCode.Trim()   ==   String.Empty)
                        return;

                System.Drawing.Bitmap   image   =   new   System.Drawing.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   <   25;   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.Silver),   x1,   y1,   x2,   y2);
                        }

                        Font   font   =   new   System.Drawing.Font( "Arial ",   12,   (System.Drawing.FontStyle.Bold   |   System.Drawing.FontStyle.Italic));
                        System.Drawing.Drawing2D.LinearGradientBrush   brush   =   new   System.Drawing.Drawing2D.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);

                        System.IO.MemoryStream   ms   =   new   System.IO.MemoryStream();
                        image.Save(ms,   System.Drawing.Imaging.ImageFormat.Gif);
                        Response.ClearContent();
                        Response.ContentType   =   "image/Gif ";
                        Response.BinaryWrite(ms.ToArray());
                }
                finally
                {
                        g.Dispose();
                        image.Dispose();
                }
        }
}
在login控件中加入:
<tr>
                                                                        <td   style= "width:   151px ">
                                                                                <asp:Label   ID= "Label1 "   runat= "server "   AssociatedControlID= "Password "> 验证码: </asp:Label>
                                                                               
                                                                                </td>
                                                                </tr>
                                                                <tr>
                                                                        <td   style= "width:   151px ">


                                                                                <asp:TextBox   ID= "txtImgValid "   runat= "server "   Font-Size= "0.8em "   > </asp:TextBox>
                                                                                <img   id= "imgValid "   alt= "单击可刷新 "   src= "imageValidate.aspx "   />
                                                                        </td>
                                                                        <td>
                                                                                                                                                       
                                                                       
                                                                </tr>

login.cs中对应的代码为
  protected   void   Login1_Authenticate(object   sender,   AuthenticateEventArgs   e)
        {
                TextBox   txtImage   =   Login1.FindControl( "txtImgValid ")   as   TextBox;
                if   (Request.Cookies[ "CheckCode "]   ==   null)
                {
                        Response.Write( " <script   language= 'javascript '> alert( '您应启动cookies! ') </script> ");
                        e.Authenticated   =   false;
                        return;
                }


                if   (String.Compare(Request.Cookies[ "CheckCode "].Value,   txtImage.Text,   true)   !=   0)


                {
                        Response.Write( " <script   language= 'javascript '> alert( '不匹配! ') </script> ");
                        e.Authenticated   =   false;
                        return;
                }
           
                e.Authenticated   =   true;
               

        }

[解决办法]
用Session
[解决办法]
登录成功后,顺手把Session清掉
[解决办法]
你用的是Cookies且你的页面加载时也没有判断,注意Page.IsPageBack的用法
[解决办法]
如果是这样的话,那你把IE设置中的, "检查所存网页的较新版本 "设置为 "每次访问此页时检查 "试试

热点排行