我正在做一个网站的用户登录界面,想把验证码部分做成一个控件,我该怎么办????

解决方案 »

  1.   

    写成自定义控件,代码里把验证码添加到session
      

  2.   

     <%@ WebHandler Language="C#" Class="ValidateImageHandler" %>
     
    using System;
    using System.Web;
    using System.Web.SessionState;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Text;/// <summary>
    /// ValidateImageHandler 生成网站验证码功能
    /// </summary>
    public class ValidateImageHandler : IHttpHandler, IRequiresSessionState
    {
        int intLength = 4;               //长度
        string strIdentify = "LoginValiImg"; //随机字串存储键值,以便存储到Session中
        public ValidateImageHandler()
        {
        }    /// <summary>
        ///   生成验证图片核心代码
        /// </summary>
        /// <param name="hc"></param>
        public void ProcessRequest(HttpContext hc)
        {
            //设置输出流图片格式
            hc.Response.ContentType = "image/gif";        Bitmap b = new Bitmap(48, 20);
            Graphics g = Graphics.FromImage(b);
            g.FillRectangle(new SolidBrush(Color.WhiteSmoke), 0, 0, 120, 60);
            Font font = new Font("Arial", 18, FontStyle.Bold, GraphicsUnit.Pixel); //new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);
            Random r = new Random();        //合法随机显示字符列表
            string strLetters = "123456789";
            //string strLetters = "赵钱孙李周吴郑王冯陈卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏姜";
            StringBuilder s = new StringBuilder();        //将随机生成的字符串绘制到图片上
            for (int i = 0; i < intLength; i++)
            {
                s.Append(strLetters.Substring(r.Next(0, strLetters.Length - 1), 1));
                g.DrawString(s[s.Length - 1].ToString(), font, new SolidBrush(Color.BlueViolet), i * 11, 1);//
            }        //生成干扰线条
            Pen pen = new Pen(new SolidBrush(Color.Violet), 1);
            for (int i = 0; i < 4; i++)
            {
                g.DrawLine(pen, new Point(r.Next(80, 120), r.Next(0, 20)), new Point(r.Next(80, 120), r.Next(0, 60)));
            }
            b.Save(hc.Response.OutputStream, ImageFormat.Gif);
            Database.WebInfo.SetSessionInfo(strIdentify, s.ToString()); 
            //先保存在Session中,验证与用户输入是否一致
            hc.Response.End();    }
        /// <summary>
        /// 表示此类实例是否可以被多个请求共用(重用可以提高性能)
        /// </summary>
        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }
      

  3.   

    提醒一下.此文件后缀名是.ashx.
    把此文件放到img位置
    更换验证码时重新访问这个页面.
    为了保证每次访问都是最新版本,所以建议应该这样访问.
     <script language="javascript" type="text/javascript">
        <!--
        var rNum=0.00002321598786546345647;
        function changeimage()
        {    
        rNum = rNum +0.00001;
        var img=document.getElementById("valiimage");
        img.src="../Public/ValidateImageHandler.ashx?"+rNum;
        }
        
        -->
        </script>
      

  4.   

    public class 验证码控件 : System.Web.UI.WebControls {
      protected override Render(HtmlTextWriter writer) {
        // TODO: 在这里输出页面逻辑
      }
    }