2009-07-14 283 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( 「/相對/路徑/到/ home.page」,假);將您重定向到主頁。

我想看看重構的代碼,所以你有幾個方法:

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 2009-07-14 07:49:30

1

除了毛羅的答案在這裏,你可能要考慮一些其他的變化:

  1. 將您的Web Controls重命名爲更有意義的名稱,例如txtPassword。
  2. 將連接字符串存儲在Web.config文件中,以便您可以在測試之間進行更靈活的轉換。
  3. 最後在連接中使用using語句而不是try。
  4. SqlDataAdapter將處理關閉和打開連接。
  5. 你可以,如果你使用SQL Server 2005或以上,而不使用SP參數(SP將不會有太大的超過內嵌SQL的性能改進)。
0

你的gridview是毫無意義的,就好像登錄不成功,它將不包含任何內容,並且如果登錄成功,你將移動到另一個頁面。