ASP.NET 實現登入介面(產生驗證碼)

來源:互聯網
上載者:User
      這周末也沒幹啥,真正開始ASP,做了個學籍管理系統的登入介面,登入介面主要包括使用者名稱、密碼、驗證碼,介面字型用了<font size="5" color="blue" font-family:"華文琥珀";></font>改變字型,產生驗證碼控制項 ImageButton  (例如:<asp:ImageButton ID="ImageButton1" runat="server" />)
 還學會了圖片按鈕 HyperLink (例如: <asp:HyperLink  ID="HyperLink1" runat="server" Text="link to Default" NavigateUrl="~/Default.aspx" ImageUrl="~/Image/1.gif"></asp:HyperLink>)
其中我覺得很難的就是驗證碼的產生,你首先在網站中添加pivture.aspx 的表單,開啟字碼頁面(即pivture.aspx.cs)並錄入下面代碼(完整的)Code

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Drawing;
using System.IO;

public partial class Picture : System.Web.UI.Page
{
    Random ran = new Random();
    protected void Page_Load(object sender, EventArgs e)
    {
        string str = getRandomValidate(4);
        Session["CheckCode"] = str;//這一部是Wie了驗證碼寫入Session,進行驗證,也可以使用cookie
        getImageValidate(str);  
    }
    //得到隨機字串,長度自訂
    private string getRandomValidate(int len)
    {
        int num;
        int tem;
        string rtuStr="";
        for (int i = 0; i < len;i++ )
        {
            num = ran.Next();
            tem = num % 10 + '0';//產生數字
            //tem = num % 26 + 'A';//產生字元
            rtuStr += Convert.ToChar(tem).ToString();

        }
        return rtuStr;
    }
    //產生映像
    private void getImageValidate(string strValue)
    {
        //string str=oo00;前兩個為字母o,後兩個數為0
        int width = Convert.ToInt32(strValue.Length*12);
        Bitmap img = new Bitmap(width,23);
        Graphics gfc = Graphics.FromImage(img);
        gfc.Clear(Color.White);
        drawLine(gfc,img);
        //寫驗證碼,要定義Font
        Font font = new Font("arial",12,FontStyle.Bold);
        //Font font = new Font("宋體",12,FontStyle.Bold|FontStyle.Italic);
        System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0,0,img.Width,img.Height),Color.DarkOrchid,Color.Blue,1.5f,true);
        gfc.DrawString(strValue,font, brush ,3,2);
        drawPoint(img);
        gfc.DrawRectangle(new Pen(Color.DarkBlue),0,0,img.Width-1,img.Height-1);
        //將映像添加到頁面
        MemoryStream ms = new MemoryStream();
        img.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
        //更改HTTP
        Response.ClearContent();
        Response.ContentType = "image/gif";
        Response.BinaryWrite(ms.ToArray());
        //Dispose
        gfc.Dispose();
        img.Dispose();
        Response.End();

    }

    private void drawLine(Graphics gfc,Bitmap img)
    {
        //選擇畫10條線,也可以增加,也可以不要線,只要隨機雜點就行
        for (int i = 0; i < 10;i++ )
        {
            int x1 = ran.Next(img.Width);
            int y1 = ran.Next(img.Height);
            int x2 = ran.Next(img.Width);
            int y2 = ran.Next(img.Height);
            gfc.DrawLine(new Pen(Color.Silver),x1,y1,x2,y2);//注意畫筆要淡,不然看不清
        }
 
    }

    //private void drawPoint(Bitmap img)
    //{
   
    //}

    private void drawPoint(Bitmap img)
    {
        int col = ran.Next();//在一次的圖片中雜點顏色相同
        for (int i = 0; i < 100; i++)
        {
            int x = ran.Next(img.Width);
            int y = ran.Next(img.Height);
            img.SetPixel(x,y,Color.FromArgb(col));
        }
    }
  
}

錄完後,需要在 登入介面顯示驗證碼,則需要在
登入介面的代碼檔案 Page_Load 中加入  ImageButton1.ImageUrl = "~/Picture.aspx";
其登陸頁面的代碼Default.aspx.cs中的代碼為Code
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ImageButton1.ImageUrl = "~/Picture.aspx";
        if (Session["CheckCode"] == null)
            Information.Text = "對不起,驗證碼建置錯誤!";
    }

    protected void OK_Click(object sender, EventArgs e)
    {
        if (UserName.Text.Length == 0)
            Information.Text = "請輸入使用者名稱!";
        else
        {
            if(Password.Text.Length ==0)
                Information.Text = "請輸入密碼!";
            else if (CheckCode.Text.ToString() != Session["CheckCode"].ToString())
            {
                Information.Text = "對不起,驗證碼不正確,請重新輸入!";
            }
            else if (UserName.Text == "Admin" && Password.Text == "Admin" && CheckCode.Text.ToString() == Session["CheckCode"].ToString())
            {
                Information.Text = "使用者:" + UserName.Text + "登入成功!";
                Response.Redirect("~/Default2.aspx");
            }
            else
                Information.Text = "使用者不存在或密碼不正確!";
        }
    }

    protected void Cancel_Click(object sender, EventArgs e)
    {
        Information.Text = "已退出登入!" ;
    }

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.