Проблема входа в систему, показывает страницу ошибки
Логин - это моя стартовая страница по умолчанию в моем проекте.после входа виден только сайт, в противном случае переходит на страницу ошибки.
в моем вопросе у меня есть имя пользователя пароль и isctive в моей базе данных,но всегда видна только страница ошибки
Что я уже пробовал:
<pre>using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.SqlClient; public partial class Login : System.Web.UI.Page { SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString); protected void Page_Load(object sender, EventArgs e) { try { if (!Page.IsPostBack) { if (Request.QueryString.Count > 0) { string UserID = Request.QueryString["UserID"]; Session["UserID"] = UserID; Response.Redirect("Default.aspx",false); } } } catch (Exception ex) { Session["Error"] = ex.ToString(); Response.Redirect("Error.aspx"); } } protected void btnLogin_Click(object sender, EventArgs e) { try { if (CheckUsername()) { if (CheckPassword()) { RedirectPage(); } else { lblError.Text = "Your login attempt has failed. <BR>Please try again!"; } } else { lblError.Text = "Your login attempt has failed. <BR>The username or password may be incorrect"; } } catch (Exception ex) { Session["Error"] = ex.ToString(); Response.Redirect("Error.aspx"); } } public bool CheckUsername() { string Query = "select * from users where IsActive='True' and Email='" + txtUserName.Text + "'"; DataTable dt = GetData(Query); if (dt.Rows.Count > 0) return true; else return false; } public bool CheckPassword() { string Query = "select * from users where IsActive='True' and Email='" + txtUserName.Text + "' and Password='"+txtPassword.Text+"'"; DataTable dt = GetData(Query); if (dt.Rows.Count > 0) return true; else return false; } public DataTable GetData(string Query) { SqlCommand cmd = new SqlCommand(Query, con); SqlDataAdapter sda = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); sda.Fill(dt); return dt; } public void RedirectPage() { string Query = "select top(1) * from users where IsActive='True' and Email='" + txtUserName.Text + "' and Password='" + txtPassword.Text + "'"; DataTable dt = GetData(Query); if (dt.Rows.Count == 1) { Session["UserID"] = dt.Rows[0]["UserID"].ToString(); Response.Redirect("Home.aspx", false); } else { lblError.Text = "You don't have permission to view this Site!"; Session["UserID"] = ""; } /*if (dt.Rows.Count == 1) { if (Convert.ToBoolean(dt.Rows[0]["Products"]) == true && Convert.ToBoolean(dt.Rows[0]["Users"]) == true) { Session["UserID"] = dt.Rows[0]["UserID"].ToString(); Response.Redirect("Default.aspx", false); } else if (Convert.ToBoolean(dt.Rows[0]["Products"]) == true && Convert.ToBoolean(dt.Rows[0]["Users"]) == false) { Session["UserID"] = dt.Rows[0]["UserID"].ToString(); Response.Redirect("Default.aspx", false); } else if (Convert.ToBoolean(dt.Rows[0]["Products"]) == false && Convert.ToBoolean(dt.Rows[0]["Users"]) == true) { Session["UserID"] = dt.Rows[0]["UserID"].ToString(); Response.Redirect("Users.aspx", false); } else { Session["UserID"] = ""; Response.Redirect("Login.aspx", false); } } else { lblError.Text = "You don't have permission to view this Site!"; Session["UserID"] = ""; }*/ } }
Bryian Tan
Что такое тип столбца "IsActive"? Укусил? Тип varchar?
ZurdoDev
Это очень, очень просто для вас, чтобы исправить. Просто поставьте точку останова и отладьте ее, и вы точно увидите, что происходит.
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
Richard Deeming
Вы также храните пароли в виде обычного текста. То есть чрезвычайно плохая идея. Вы должны хранить только соленый хэш пароля пользователя:
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хеширование паролей - все правильно[^]
Richard Deeming
И зачем вы заново изобретаете колесо, когда ASP.NET есть ли несколько совершенно хороших систем аутентификации?
Например: Личность ASP.NET [^]