Если предположить, что я на http://localhost:7924/default, и я ввожу данные для входа, здесь то, что происходит в каждом сценарии:Перенаправление страницы после SQL запроса
Если неверный пароль (или правильно) + login_name не существует =>обновления страницы
Если пароль неправильно + login_name существует (правильный) => собирается error_page
Если оба правильны => перенаправлены CP.aspx
string text = username_login.Text;
string str2 = password_login.Text;
SqlConnection sqlcon = new SqlConnection(Functions.Auth());
SqlCommand sqlcmd = new SqlCommand();
sqlcmd.CommandText = "SELECT TOP 1 password FROM dbo.Accounts WHERE login_name = @login_name";
sqlcmd.Parameters.Add("@login_name", System.Data.SqlDbType.NVarChar).Value = text;
sqlcmd.CommandType = System.Data.CommandType.Text;
sqlcmd.Connection = sqlcon;
sqlcon.Open();
SqlDataReader sqlreader = sqlcmd.ExecuteReader();
string returnString = String.Empty;
while (sqlreader.Read())
{
if (sqlreader["password"].ToString() == Functions.CreateMD5Hash("5487" + str2.ToString()))
{
this.Session["logged_in"] = "true";
this.Session["username"] = text;
base.Response.Redirect("/CP.aspx");
}
else
{
base.Response.Redirect("/error_page?err=login-fail");
}
}
Оба 2. & 3. работают, как должно быть, однако, первый не является. Я не понимаю, почему он обновляет страницу вместо того, чтобы перейти на страницу с ошибкой, поскольку данные неверны. (поскольку он не может провести сравнение)
EDIT: Я также проверял, является ли пароль NULL => перенаправлять на страницу error_page, но это также обновляет страницу.
Когда login_name не существует, выполнение не будет входить в цикл while (поскольку sqlreader.Read() вернет false), поэтому он снова отображает одну и ту же страницу – Thangadurai
@Thangadurai. Я исправил это, проверив, является ли Sqlreader.Read() ложным после инструкции else. благодаря ! –