1. 如何製作網站的用戶登錄界面
很多用戶在開發 ASP.NET 應用程序時都有這樣的需求:管理員角色的賬戶使用管理員的登錄界面進行登錄,普通用戶角色的賬戶使用普通用戶的登錄界面進行登錄。由於ASP.NET的web.config里只能使用一個 authentication mode="Forms" 節點,所以,要實現不同用戶採用不同的登錄界面,一個辦法就是創建一個管理員專用的虛擬目錄,並設置為應用程序來實現。下面介紹另外一種採用重定向的辦法來解決這個問題。 本文介紹的方法原理是根據登錄界面的返回地址進行判斷,然後重定向到不同的頁面。下面就是實現的詳細過程。 1,創建一個網站,在網站里創建Admin文件夾和User文件夾,分別存放admin和普通用戶所使用的文件。也可以只設置一個 Admin 文件夾。由於本方法採用的判斷返迴路徑的方法,所以,要能從路徑中區分出哪些是admin用戶使用的文件夾。當然,採用其他的判斷方法也是可以的。 2,在網站根目錄下分別創建3個登錄文件:Login.aspx、UserLogin.aspx和AdminLogin.aspx。其中Login.aspx文件起地址轉換的作用,Login.aspx文件的主要內容: protected void Page_Load(object sender, EventArgs e) { String ReturnUrl = Request.QueryString["ReturnUrl"]; if (ReturnUrl == null || ReturnUrl.Equals(String.Empty)) { //默認情況下,按普通用戶進行登錄 Response.Redirect("~/UserLogin.aspx"); } else { if (ReturnUrl.ToLower().Contains("/admin/")) { Response.Redirect("~/AdminLogin.aspx?ReturnUrl=" + Server.UrlEncode(ReturnUrl)); } else { Response.Redirect("~/UserLogin.aspx?ReturnUrl=" + Server.UrlEncode(ReturnUrl)); } } 在這個文件的代碼中,如果ReturnUrl中含有"/admin/",就重定向到AdminLogin.aspx登錄界面;否則,就重定向到 UserLogin.aspx 登錄界面。 UserLogin.aspx這個文件的內容如下: < %@ Page Language="C#" % > < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > < mce:script runat="server" >< !-- protected void Button1_Click(object sender, EventArgs e) { //密碼驗證過程在此省略,假如用戶名是mxh,密碼是mengxianhui String UserName = "mxh"; FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,//票證的版本號 UserName,//與身分驗證票關聯的用戶名 DateTime.Now, //票證發出時的本地日期和時間 DateTime.Now.AddHours(1),//票證過期的本地日期和時間 true,// 如果票證存儲在持久性cookie中(跨瀏覽器會話保存)則為 true 否則為false 如果票證儲存在URL中,將忽略此值 "reader",//儲存在票證中持定的用戶信息,本頁面供 reader 登錄使用 FormsAuthentication.FormsCookiePath //票證儲存在cookie中的路徑 ); //如果 forms 元素的 protection 屬性設置為 All 或 Encryption,則窗體身份驗證使用 Encrypt 方法對窗體身份驗證票進行加密和簽名。 string encTicket = FormsAuthentication.Encrypt(ticket); HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket); Response.Cookies.Add(cookie); Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName, true)); } // -- >< /mce:script > < html xmlns=" http://www.w3.org/1999/xhtml" > < head runat="server" > < title >孟憲會之多用戶登錄測試頁面< /title > < /head > < body > < form id="form1" runat="server" > 普通用戶登錄界面省略< br / > < asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="普通用戶登錄" / > < /form > < /body > < /html > < %@ Page Language="C#" % > < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > < mce:script runat="server" >< !-- protected void Button1_Click(object sender, EventArgs e) { //密碼驗證過程在此省略,假如用戶名是mxh,密碼是mengxianhui String UserName = "mxh"; FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,//票證的版本號 UserName,//與身分驗證票關聯的用戶名 DateTime.Now, //票證發出時的本地日期和時間 DateTime.Now.AddHours(1),//票證過期的本地日期和時間 true,// 如果票證存儲在持久性cookie中(跨瀏覽器會話保存)則為 true 否則為false 如果票證儲存在URL中,將忽略此值 "reader",//儲存在票證中持定的用戶信息,本頁面供 reader 登錄使用 FormsAuthentication.FormsCookiePath //票證儲存在cookie中的路徑 ); //如果 forms 元素的 protection 屬性設置為 All 或 Encryption,則窗體身份驗證使用 Encrypt 方法對窗體身份驗證票進行加密和簽名。 string encTicket = FormsAuthentication.Encrypt(ticket); HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket); Response.Cookies.Add(cookie); Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName, true)); } // -- >< /mce:script > < html xmlns=" http://www.w3.org/1999/xhtml" > < head runat="server" > < title >孟憲會之多用戶登錄測試頁面< /title > < /head > < body > < form id="form1" runat="server" > 普通用戶登錄界面省略< br / > < asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="普通用戶登錄" / > < /form > < /body > < /html >
麻煩採納,謝謝!