Id: PK
TenTruyCap: FK
Để thực hiện ứng dụng đăng nhập, đầu tiên cần quan tâm các hàm sau:
- cmdDangNhap_Click
- DoLogin
Tên bài viết: Xây dựng ứng dụng đăng nhập
Tác giả: Quang IT
Cấp độ bài viết: Chưa đánh giá
Tóm tắt:
- Sử dụng gene CodeSmith
- Mã hóa MD5
- Thay thế chuỗi
- Forms authentication
Trang Login.aspx
Sử dụng các control sau: Label, TextBox, ImageButton(hoặc button) và RequiredFieldValidator(ràng buộc ô khai báo)
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="width: 39px"></td>
<td class="hrm_title_grey" style="width: 83px">Tên truy cập</td>
<td width="7" class="hrm_title_grey">:</td>
<td>
<asp:TextBox ID="UserName" CssClass="hrm_textbox" runat="server" Width="180px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" SetFocusOnError="true" CssClass="hrm_title_red" runat="server" ErrorMessage="+ Chưa nhập Tên truy cập!" ControlToValidate="UserName">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td style="width: 39px"></td>
<td class="hrm_title_grey" style="width: 83px">Mật khẩu</td>
<td width="7" class="hrm_title_grey">:</td>
<td>
<asp:TextBox ID="Password" CssClass="hrm_textbox" runat="server" TextMode="Password" Width="180px"></asp:TextBox>
<asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password" CssClass="hrm_title_red" ErrorMessage="+ Chưa nhập Mật khẩu!">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td style="width: 39px"></td>
<td align="right" style="width: 83px"></td>
<td colspan="2" style="padding-left:40px">
<asp:ImageButton ID="cmdDangNhap" ImageUrl="~/Images/login.jpg" runat="server" onclick="cmdDangNhap_Click" />
<asp:ImageButton ID="cmdHuyBo" CausesValidation="false" ImageUrl="~/Images/huy.jpg" OnClientClick="window.close();" runat="server" />
</td>
</tr>
</table>
Tại trang Login.cs
Viết các câu lệnh thực hiện xử lý.
protected void Page_Load(object sender, EventArgs e)
{
//Xóa phiên làm việc
Session.Clear();
FormsAuthentication.SignOut();
}
/// <summary>
/// Xử lý button đăng nhập
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void cmdDangNhap_Click(object sender, ImageClickEventArgs e)
{
//Common.StandardString: Xử lý chuỗi nhập vào, replace các ký tự đặc biệt
string strUserName = Common.StandardString(UserName.Text);
string strPassWord = Common.StandardString(Password.Text);
string strUserCode = strUserName + strPassWord;
//Dùng MD5 để mã hóa
strPassWord = Common.EncryptMD5(strPassWord);
strUserCode = Common.EncryptMD5(strUserCode);
//Gọi hàm DoLogin
DoLogin(strUserName, strPassWord, strUserCode);
}
public void DoLogin(string strUserName, string strPassword, string strUserCode)
{
//NguoiDung: Layer Entities - sử dụng để lấy tên truy cập và so sánh sự tồn tại của nó
//Table Người Dùng được gene code bởi CodeSmith
NguoiDung entNguoiDung = DataRepository.NguoiDungProvider.GetByTenTruyCap(strUserName);
if (entNguoiDung == null)
{
WebMessage.Show("Người dùng không tồn tại trong hệ thống, Xin vui lòng thử lại");
UserName.Focus();
return;
}
string CurrentPassword = entNguoiDung.MatKhau;
string CurrentUserCode = entNguoiDung.MaTruyCap;
string strPassWord = Common.StandardString(Password.Text);
if (strPassword.Equals(CurrentPassword) && strUserCode.Equals(CurrentUserCode))
{
string strUserInfor = string.Format("{0};{1};{2}", entNguoiDung.Id, entNguoiDung.TenTruyCap, entNguoiDung.HoTen);
Session["UserName"] = entNguoiDung.TenTruyCap;
FormsAuthentication.SetAuthCookie(strUserInfor, false);
Response.Redirect("~/AdminCP/HomeAdmin.aspx");
}
else
{
WebMessage.Show("Mật khẩu không đúng, Xin vui lòng thử lại");
Password.Focus();
return;
}
}
using App_code:
Common.cs
/// <summary>
/// Chuẩn hóa chuỗi dữ liệu khi người dùng input
/// Input: sContent (chuỗi cần chuẩn hóa)
/// Output: Chuỗi sau khi replace các ký tự đặc biệt
/// </summary>
public static string StandardString(string sContent)
{
sContent = sContent.Trim();
sContent = sContent.Replace("<td>", "");
sContent = sContent.Replace("</td>", "");
sContent = sContent.Replace("<tr>", "");
sContent = sContent.Replace("</tr>", "");
sContent = sContent.Replace("<table>", "");
sContent = sContent.Replace("</table>", "");
sContent = sContent.Replace("<script", "");
sContent = sContent.Replace("</script>", "");
sContent = sContent.Replace("OR", "");
sContent = sContent.Replace("ALTER", "");
sContent = sContent.Replace("DROP", "");
return sContent;
}
/// <summary>
/// Mã hóa chuỗi thành chuỗi MD5
/// Input: sToEncrypt (Chuỗi cần mã hóa)
/// Output: Chuỗi sau khi mã hóa
/// </summary>
public static string EncryptMD5(string sToEncrypt)
{
System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding();
byte[] bytes = ue.GetBytes(sToEncrypt);
// encrypt bytes
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hashBytes = md5.ComputeHash(bytes);
// Convert the encrypted bytes back to a string (base 16)
string hashString = "";
for (int i = 0; i < hashBytes.Length; i++)
{
hashString += Convert.ToString(hashBytes[i], 16).PadLeft(2, '0');
}
return hashString.PadLeft(32, '0');
}
Ngoài ra, còn phải config web.config để cấu hình timeout
<authentication mode="Forms">
<forms loginUrl="~/AdminCP/Default.aspx" name=".ASPXAUTH" timeout="320"></forms>
</authentication>