在使用asp.net进行登录验证时需要帮助

时间:2009-01-28 06:10:54

标签: asp.net authentication login 3-tier

简单的方法我可以验证登录页面。如何在3层架构中进行身份验证?请有人给我发送DAL,BAL和GUI层应该是什么的代码?这是我的简单代码:

的Web.config:

<authentication mode="form">
    <form loginurl="Login.aspx">
         <credential password Format="clear">
          <user name="abcd" password="1234">
        </credential>
      </authentication>
     </form>
   <authorization>
     <deny users="?">
   </authorization>

login.aspx.cs:

   sqlconnection con=new sqlconnection("server=localhost;database=dbname;uid=;pwd=;Trusted_Connection=true");
sqldataAdapter da=new sqldataAdapter("select * from Login where UserName='"+TextBox1.Text+"' and Password='"+TextBox2.Text+"'",con);
Dataset ds=new Dataset();
da.Fill(ds);

if(ds.Tables[0].rows.Count>0)
{
   if(FormAuthentication.Authenticate("abcd","1234")
   {
        FormAuthentication.RedirectFromLoginPage(TextBox1.Text,false);
        Response.write("Logged in");
    }
    else
    {
        Response.write("Unautherised User");
    }

   Response.Redirect("welcome.aspx");
}
else
{
  Response.write("Sorry Invalid UserName or Password");
}

2 个答案:

答案 0 :(得分:1)

一般来说,你应该至少有以下几个类:

  • 在DAL中,您应该拥有一个数据库连接的类
  • 在BAl中,您应该有一个代表每个用户实例的Class。这个类应该有一个名为login()的方法,其中包含所有的身份验证和授权。
  • 表示用户界面的网络表单。

另外,为了防止SQL注入,永远不要连接查询字符串。改为使用参数。

以下是一些示例类:

namespace DAL
{
    public class ConnectionManager
    {
        public static SqlConnection GetConnection() {
            SqlConnection cn = new SqlConnection("server=localhost;database=dbname;uid=;pwd=;Trusted_Connection=true");
            cn.Open();
            return cn;
        }
    }
}

namespace BAL
{
    public class User
    {
        public string UserName { get; set; }
        public string Password { private get; set; }

        public bool Login() {
            return Login(this.UserName, this.Password);
        }

        public bool Login(string user, string password) {
            bool success=false;
            using (SqlConnection cn = ConnectionManager.GetConnection())
            {
                string sql = "select count(*) from Login where UserName=@user and Password=@password";
                using (SqlCommand command = new SqlCommand(sql, cn))
                {
                    command.Parameters["@user"].Value = user;
                    command.Parameters["@password"].Value = password;
                    success = (int)command.ExecuteScalar() > 0;
                }
                cn.Close();
            }
            return success;
        }
    }
}

答案 1 :(得分:0)

为什么你想要重新发明轮子,有点不知所措? ASP.NET成员资格提供程序为您完成所有这一切,如果您需要大量修改其行为,它的开源,易于阅读,理解和更改。它可以与您自己的n层架构轻松集成 - 我们一直这样做。