需要源碼請點贊關注收藏後評論區留言私信~~~
一、登入子產品概述
并不是任何人都可以參加線上考試,預設是不允許匿名登入的,隻有經過管理者配置設定的賬号和密碼才能登入線上考試系統參加考試,這時就需要通過登入子產品驗證登入使用者的合法性,登入子產品是線上考試系統的第一道安全屏障,運作效果如下
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLyUmN0YzY4UWO0MmMjJDOhZjZkRzMzM2N1YTY0kTZ5MzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
二、設計登入界面
建立一個網頁,命名為Login.aspx,該網頁主要用于實作登入系統的登入功能,其中用到的控件如下圖所示
三、生成驗證碼
建立一個Image.aspx頁面,用來生成登入界面中的驗證碼,在該頁面的代碼檔案中,自定義一個RndNum方法,主要調用Random類的Next方法生成指定位數的驗證碼
private string RndNum() //生成驗證碼
{
string MaxNum = ""; //最大值
string MinNum = ""; //最小值
for (int i = 0; i < 5; i++) //控制驗證碼的最大位數
{
MaxNum = MaxNum + "5";
}
MinNum = MaxNum.Remove(0, 1); //控制驗證碼的最小位數
Random rd = new Random(); //定義随機數生成器
string VNum = Convert.ToString(rd.Next(Convert.ToInt32(MinNum),
Convert.ToInt32(MaxNum))); //生成4位或者5位的驗證碼
return VNum; //傳回生成的驗證碼
}
定義一個ValidateCode方法,使用GDI+技術将生成的驗證碼繪制成圖檔,并借助MemoryStream記憶體流将其輸出到頁面中
private void ValidateCode(string VNum)//繪制驗證碼
{
Bitmap Img = null; //建立位圖對象,用來存儲生成的驗證碼圖檔
Graphics g = null; //繪制驗證碼的對象
MemoryStream ms = null; //記憶體流對象,用來緩存驗證碼圖檔
int gheight = VNum.Length * 9; //設定驗證碼高度
Img = new Bitmap(gheight, 18); //建立位圖對象
g = Graphics.FromImage(Img); //從位圖對象建立繪圖對象
g.Clear(Color.WhiteSmoke); //設定背景顔色
Font f = new Font("Tahoma", 9); //設定文字字型
SolidBrush s = new SolidBrush(Color.Red); //設定文字顔色
g.DrawString(VNum, f, s, 3, 3); //繪制驗證碼
ms = new MemoryStream(); //建立記憶體流對象
Img.Save(ms, ImageFormat.Jpeg); //将驗證碼儲存到記憶體流中
Response.ClearContent(); //清空頁面内容
Response.ContentType = "image/Jpeg"; //設定輸出格式為jpeg格式
Response.BinaryWrite(ms.ToArray()); //輸出驗證碼
g.Dispose(); //釋放繪圖對象資源
Img.Dispose(); //釋放位圖資源
Response.End(); //終止響應
}
在Inage.aspx頁面的Page_Load事件中分别調用自定義的方法生成會繪制驗證碼,并且将生成的驗證碼存儲在Session中,以便登入時驗證
protected void Page_Load(object sender, EventArgs e)
{
string tmp = RndNum(); //擷取生成的驗證碼
Session["verify"] = tmp; //将驗證碼存儲在Session中,以便驗證
ValidateCode(tmp); //回執驗證碼
}
四、登入功能的實作
在登入頁面中輸入賬号,密碼和驗證碼等資訊,并确認無誤後,單擊登入按鈕進行登入,程式首先會判斷輸入的驗證碼是否正确,如果正确,則根據選擇的登入身份調用公共類中的相應的方法驗證賬号和密碼是否正确,如果登入的賬号和密碼正确,則會轉向與登入身份相符的頁面,登入按鈕的Click事件代碼如下
protected void btnlogin_Click(object sender, EventArgs e)
{
if (txtCode.Text.Trim() != Session["verify"].ToString())
{
//輸入錯誤提示
Response.Write("<script>alert('驗證碼錯誤');location='Login.aspx'</script>");
}
else
{
if (this.ddlstatus.SelectedValue == "學生") //如果登入身份為學生
{
//驗證登入賬号和密碼
if (BaseClass.CheckStudent(txtNum.Text.Trim(), txtPwd.Text.Trim()))
{
Session["ID"] = txtNum.Text.Trim();
Response.Redirect("student/studentexam.aspx"); //轉向考試界面
}
else
{
Response.Write("<script>alert('您不是學生或者使用者名和密碼錯誤
');location='Login.aspx'</script>");
}
}
if (this.ddlstatus.SelectedValue == "教師") //如果登入身份為教師
{
//驗證教師賬号和密碼
if (BaseClass.CheckTeacher(txtNum.Text.Trim(), txtPwd.Text.Trim()))
{
Session["teacher"] = txtNum.Text;
Response.Redirect("teacher/TeacherManage.aspx"); //轉向試題管理子產品
}
else
{
Response.Write("<script>alert('您不是教師或者使用者名和密碼錯誤
');location='Login.aspx'</script>");
}
}
if (this.ddlstatus.SelectedValue == "管理者") //如果登入身份為管理者
{
//驗證管理者賬号和密碼
if (BaseClass.CheckAdmin(txtNum.Text.Trim(), txtPwd.Text.Trim()))
{
Session["admin"] = txtNum.Text;
Response.Redirect("admin/AdminManage.aspx"); //轉向背景管理者子產品
}
else
{
Response.Write("<script>alert('您不是管理者或者使用者名和密碼錯誤
');location='Login.aspx'</script>");
}
}
}
}
五、關閉登入視窗時進行确認
單擊取消按鈕,通過調用javascript腳本彈出關閉提示,單擊是按鈕即可關閉登入窗體,取消按鈕按鈕的Click事件代碼如下
protected void btnconcel_Click(object sender, EventArgs e)
{
RegisterStartupScript("提示", "<script>window.close();</script>");//彈出關閉對話框
}
創作不易 覺得有幫助請點贊關注收藏~~~