2014-01-27 55 views
0

首先,我是C#的新手,我試圖爲我的項目創建一個登錄頁面。我在我的Students表中創建了數據庫IdPass無法在asp.net中創建登錄頁面

我想使用憑據登錄,但我認爲我在某個地方犯了一個錯誤,無論我寫入IdPass字段,即使我將它們留空,我也可以通過登錄頁面進入。

這裏是我的代碼希望你能幫助我從現在開始感謝。

protected void Button1_Click(object sender, EventArgs e){ 
     try{ 
       con.Open(); 
       string IdText = user.Text; 
       string PassText = pass.Text; 

       SqlCommand cmd = new SqlCommand("SELECT ISNULL(Id, '') AS Id, ISNULL(Pass,'') AS Pass FROM Students WHERE Id = @Id and Pass = @Pass", con); 
       cmd.Parameters.Add(new SqlParameter("Id", IdText)); 
       cmd.Parameters.Add(new SqlParameter("Pass", PassText)); 

       SqlDataReader dr = cmd.ExecuteReader(); 
       Response.Redirect("Main.aspx"); 

       try{ 
        dr.Read(); 
        if (dr["Id"].ToString().Trim() == IdText && dr["Pass"].ToString().Trim() == PassText) { 
         Label4.Text = "This message won't Display"; 
        } 
       } 
       catch{ 
        Label4.Text = "Invalid Username or Password"; 
       } 

       dr.Close(); 
       con.Close(); 
      } 
      catch (Exception ex){ 
       Label4.Text = (ex.Message); 
      } 
     } 
} 
+0

你的web.config關於訪問權限說了什麼? – Dalorzo

+1

爲什麼會有Response.Redirect(「Main.aspx」);在中間?即:如果main.aspx是「登錄後面」的頁面,那麼在檢查用戶名/密碼是否有效之前,您將所有用戶都發送給它。 – Mark

+0

是的即時通訊嘗試發送人們到那個頁面我應該把那個 – Atakan

回答

0

更新與以下

protected void Button1_Click(object sender, EventArgs e){ 
    try{ 
      con.Open(); 
      string IdText = user.Text; 
      string PassText = pass.Text; 

      SqlCommand cmd = new SqlCommand("SELECT ISNULL(Id, '') AS Id, ISNULL(Pass,'') AS Pass FROM Students WHERE Id = @Id and Pass = @Pass", con); 
      cmd.Parameters.Add(new SqlParameter("@Id", IdText)); 
      cmd.Parameters.Add(new SqlParameter("@Pass", PassText)); 
      cmd.CommandType = CommandType.Text; 

      SqlDataReader dr = cmd.ExecuteReader();  

      dr.Read(); 
      if (dr["Id"].ToString().Trim() == IdText && dr["Pass"].ToString().Trim() == PassText) { 
       Response.Redirect("Main.aspx"); 
      } 
      else 
      { 
       Label4.Text = "Invalid Username or Password"; 
      }    

      dr.Close(); 
      con.Close(); 
     } 
     catch (Exception ex){ 
      Label4.Text = (ex.Message); 
     } 
    } 
} 

代碼,我希望這將有助於。

+0

謝謝它的工作只有無效的用戶名或通過部分不工作,但至少我可以登錄=) – Atakan

0

請確保您有這個在你的web.config:

<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="myLogin.aspx" name=".ASPXFORMSAUTH"> 
    </forms> 
    </authentication> 
    <authorization> 
    <deny users="?" /> 
    </authorization> 
</system.web> 

在驗證你需要這樣做:

FormsAuthentication.RedirectFromLoginPage(userName, false); 

userName,我想在你的代碼是IdText

+0

正如前面的評論中提到的那樣,您需要在代碼中間對此做些什麼:Response.Redirect(「Main.aspx」); – Dalorzo

+0

我在那裏有類似於 Atakan

+0

您的授權元素如何? – Dalorzo

0

您不應該使用try/catch塊來控制執行流 - 這是一個非常糟糕的做法,你在一個功能上做了兩次。如果您可以明確地測試'錯誤'條件(例如dr["Id"]爲空),那麼請執行此操作,而不是依賴於例外情況。