我正在尝试创建一个具有两个访问级别的登录系统。如果访问级别为 1,他们将收到“护理人员主页”,如果级别为 2,他们将收到“管理员页面”。登录表单有一个变量,用于根据数据库中的凭据验证用户名和密码,当用户单击按钮并且 tryLogin 变量返回 true 时,访问级别取自数据库中的用户名与用户名文本匹配的数据库字段
消息显示无效的登录凭据,而不是加载任何表单。我花了很长时间研究这个,但我迷路了,我希望这足以解释问题。
public bool tryLogin(string uname, string pword)
{
MySqlConnection con = new MySqlConnection("host="";user="";password=""; database="";");
MySqlCommand cmd = new MySqlCommand("SELECT * FROM Staff WHERE username = '" + uname + "' AND password ='" + pword + "';");
cmd.Connection = con;
con.Open();
MySqlDataReader reader = cmd.ExecuteReader();
if (reader.Read() != false)
{
if (reader.IsDBNull(0) == true)
{
cmd.Connection.Close();
reader.Dispose();
cmd.Dispose();
return false;
}
else
{
cmd.Connection.Close();
reader.Dispose();
cmd.Dispose();
return true;
}
}
else
{
return false;
}
}
private void LoginBT_Click(object sender, EventArgs e)
{
if (tryLogin(uname.Text, pword.Text) == true)
{
MySqlConnection con = new MySqlConnection("host="";user="";password=""; database="";");
MySqlCommand cmd2 = new MySqlCommand("SELECT access_level FROM Staff WHERE username = '" + uname + "';");
cmd2.Connection = con;
con.Open();
MySqlDataReader reader = cmd2.ExecuteReader();
if (cmd2.Equals("1"))
{
this.Hide();
CarerHomePage CarerHomePage = new CarerHomePage();
CarerHomePage.Show();
}
if (cmd2.Equals("2"))
{
this.Hide();
AdministratorHome AdministratorHome = new AdministratorHome();
AdministratorHome.Show();
}
else
{
MessageBox.Show("Invalid Login Credentials");
}
}
}
}
}
最佳答案
您需要阅读有关 SQL 注入(inject)的内容。尝试添加文本
' 或 1 = 1 --
进入您的用户名文本框并尝试登录。您还应该考虑阅读有关内置的 asp.net 用户管理/角色的内容 - 角色位在这里将为您提供很好的服务。
此处来自 ScottGu 的良好链接:
http://weblogs.asp.net/scottgu/archive/2005/10/18/427754.aspx
关于c# - 具有两个访问级别的登录系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5313620/