要為後台寫一個登陸介面,asp.net 內建Login空間,因為直接就可以了。
雙擊添加的Login空間將出現如下代碼:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)<br /> {<br /> bool Authenticated = false;<br /> // Authenticated = AdminDB.Login(Login1.UserName,Login1.Password);<br /> Authenticated = Membership.ValidateUser(Login1.UserName, Login1.Password);<br /> e.Authenticated = Authenticated;<br /> if (Authenticated == true)<br /> {<br /> Response.Redirect("自訂跳轉方向,如http://163.com或index.aspx");<br /> }<br /> else<br /> Login1.FailureText = "使用者名稱或密碼錯誤";<br /> }
這裡直接調用了System.Web.Security.Membership.ValidateUser(username,password)方法,這樣就不用自己再寫驗證sql語句了。
不過這裡的ValidateUser(username,password)只能驗證使用者名稱和密碼是否匹配,而不能驗證其他的內容,為了能夠自訂驗證內容,我們寫了一個驗證程式。代碼如下:
AdminDB.cs
using System;<br />using System.Data;<br />using System.Configuration;<br />using System.Web;<br />using System.Web.Security;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.WebControls.WebParts;<br />using System.Web.UI.HtmlControls;<br />using System.Data.SqlClient;<br />using MyProviders;<br />/// <summary><br />/// AdminDB 的摘要說明<br />/// </summary><br />/// </p><p>namespace NewsSystem<br />{<br /> public class AdminDB<br /> {<br /> public AdminDB()<br /> {<br /> //<br /> // TODO: 在此處添加建構函式邏輯<br /> //<br /> }<br /> public static bool Login(string name, string pwd)<br /> {<br /> SqlConnection conn = NewsDB.CreatCon();<br /> try<br /> {<br /> // String strsql = "select * from dbo.AdminUser where mg_login=@login and mg_pwd=@pwd";<br /> //限定UserRoles.roleid=0即只有管理員角色才能登入<br /> //需要注意的是這裡字串很長,在換行時首字元最好流出一個空格。<br /> string strsql = "select * from (((aspnet_Membership INNER JOIN aspnet_users ON "+<br /> " aspnet_Membership.UserId = aspnet_users.UserId) INNER JOIN Users ON "+<br /> " aspnet_users.username=Users.username) INNER JOIN UserRoles ON "+<br /> " Users.userid=UserRoles.userid) where Users.Username=@name and aspnet_Membership.password=@pwd "+<br /> " and UserRoles.roleid=0";</p><p> SqlParameter[] paras = new SqlParameter[2];<br /> paras[0] = new SqlParameter("@name", SqlDbType.VarChar, 50);<br /> paras[0].Value = name;</p><p> paras[1] = new SqlParameter("@pwd", SqlDbType.VarChar, 50);<br /> //paras[1].Value = pwd;<br /> paras[1].Value = MyProviders.MySQLMembershipProvider.GetMd5(pwd);//將密碼轉化為md5格式</p><p> SqlCommand cmd = new SqlCommand(strsql, conn);<br /> for (int i = 0; i < paras.Length; i++)<br /> {<br /> cmd.Parameters.Add(paras[i]);<br /> }<br /> conn.Open();<br /> SqlDataReader dr = cmd.ExecuteReader();<br /> if (dr.Read())<br /> {<br /> return true;<br /> }<br /> }<br /> catch (Exception ex)<br /> {<br /> throw ex;<br /> }<br /> finally<br /> {<br /> conn.Close();<br /> }<br /> return false;<br /> }<br /> }<br />}
NewsDB.cs
using System;<br />using System.Data;<br />using System.Configuration;<br />using System.Web;<br />using System.Web.Security;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.WebControls.WebParts;<br />using System.Web.UI.HtmlControls;<br />using System.Data.SqlClient;<br />/// <summary><br />/// DB 的摘要說明<br />/// </summary><br />/// </p><p>namespace NewsSystem<br />{<br /> public class NewsDB<br /> {<br /> public NewsDB()<br /> {<br /> //<br /> // TODO: 在此處添加建構函式邏輯<br /> //<br /> }<br /> public static SqlConnection CreatCon()<br /> {<br /> string str = ConfigurationManager.AppSettings["SiteSqlServer"];<br /> return new SqlConnection(str);<br /> }<br /> public static bool Getcmd(String strsql, params SqlParameter[] paras)<br /> {<br /> SqlConnection conn = NewsDB.CreatCon();<br /> try<br /> {<br /> conn.Open();<br /> SqlCommand cmd = new SqlCommand(strsql, conn);<br /> for (int i = 0; i < paras.Length; i++)<br /> {<br /> cmd.Parameters.Add(paras[i]);<br /> }<br /> int a = Convert.ToInt32(cmd.ExecuteNonQuery());<br /> if (a > 0)<br /> {<br /> return true;<br /> }<br /> }<br /> catch (Exception ex)<br /> {<br /> throw ex;<br /> }<br /> finally<br /> {<br /> conn.Close();<br /> }<br /> return false;<br /> }<br /> public static DataSet Getds(String strsql)<br /> {<br /> SqlConnection con = NewsDB.CreatCon();<br /> DataSet ds = null;<br /> try<br /> {<br /> SqlDataAdapter da = new SqlDataAdapter(strsql, con);<br /> ds = new DataSet();<br /> da.Fill(ds);<br /> }<br /> catch (Exception er)<br /> {<br /> throw er;<br /> }<br /> return ds;<br /> }<br /> }<br />}
在
public static bool Login(string name, string pwd){}
中我們可以自訂sql語句,比如我們上面的例子就有驗證了使用者的角色。
參考文章:Visual Studio 2005 Login 控制項的使用