2009-07-14 2 views
0

Как я могу перенаправить с моей страницы входа на домашнюю страницу после успешного входа? У меня есть одна база данных, в которой хранятся имя пользователя и пароль. во время входа в систему он проверяет имя пользователя и пароль по запросу sql. мой код показан ниже.перенаправление страниц

protected void Button1_Click(object sender, EventArgs e) 
    { 
     if (TextBox1.Text == "") 
     { 
      Label3.Visible = true; 
      Label3.Text = "* Required Field"; 
     } 
     else if (TextBox2.Text == "") 
     { 
      Label4.Visible = true; 
      Label4.Text = "* Required Field"; 
     } 

     else 
     { 
      Label3.Visible = false; 
      Label4.Visible = false; 
      userid = TextBox1.Text; 
      pass = TextBox2.Text; 

      SqlConnection conn = new SqlConnection("SERVER= server3\\OFFICESERVERS; Initial catalog = Web; Integrated Security = SSPI"); 
      SqlCommand mycmd = new SqlCommand(); 
      mycmd.Connection = conn; 
      mycmd.CommandText = "SELECT FirstName, LastName, MiddleName, Email, Age FROM web WHERE IsActive=1 AND LoginName='" + userid + "' " + "AND Password='" + pass + "'"; 

      try 
      { 

       conn.Open(); 
       mycmd.ExecuteScalar(); 
       SqlDataAdapter da = new SqlDataAdapter(mycmd); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 
       GridView1.Visible=true; 
       GridView1.DataSource = dt; 
       GridView1.DataBind(); 
       TextBox1.Text = ""; 
       TextBox2.Text=""; 


      } 

      finally 
      { 
       conn.Close(); 
       conn.Dispose(); 
      } 
     } 
    } 

Мое требование заключается в том, если я успешно Войти ВГА перенаправлять от страницы входа на главную страницу вместо GridView связывания. Как это сделать?

ответ

3

Прежде всего, обратите внимание на использование хранимых процедур! Эта команда SQL покидает вас широко открыты для проблем с закачкой SQL (guard against SQL injection)

mycmd.CommandText = "SELECT FirstName, LastName, MiddleName, Email, Age FROM web WHERE IsActive=1 AND LoginName='" + userid + "' " + "AND Password='" + pass + "'"; 

Если я вошел

' = '' or '1'='1 

как мой пароль, что позволит мне с любым именем пользователя я хотел!

Во-вторых, вы можете просто выполнить Response.Redirect ("/ relative/path/to/home.page", false); для перенаправления на домашнюю страницу.

Я смотрел на рефакторинг, что код, у вас есть несколько методов:

protected bool Login(string username, string password) //handles logging the user in 
protected void LoginSuccess() //handles the redirect if the user successfully logs in. 
protected void BindDatagrid() //handles the databind if the user didn't log in. 
+1

Вы избили меня до удара. Хороший ответ. – BinaryMisfit

1

В дополнении к ответу Маур здесь есть несколько других изменений вы можете думать о:

  1. Переименование ваших веб-элементов управления на имена, которые имеют больше смысла, например txtPassword.
  2. Сохраните строку подключения в файле Web.config, чтобы вы могли иметь более гибкий переход от теста к производству.
  3. Используйте пример использования, связанный с соединением, а не попытку в конце.
  4. SqlDataAdapter будет обрабатывать закрытие и открытие соединения.
  5. Вы можете использовать параметры вместо SP, если вы используете SQL Server 2005 или выше (SP не будет иметь большого улучшения производительности по сравнению с встроенным SQL).
0

Ваше gridview бессмысленно, как будто логин не увенчался успехом, он ничего не будет содержать, и если логин будет успешным, вы перейдете на другую страницу.

Смежные вопросы