2015-11-22 60 views
0

我爲我的課程項目創建了一個網站,但我很難創建登錄。我使用參數將數據插入數據庫。我在c#和我的數據庫在sql服務器。關於我使用asp.net和C#創建的登錄頁面

首先我創建登錄過程:

ALTER PROC [dbo].[uselogin] 
    @userNickName nvarchar(50), 
    @userPassword nchar(10) 
    As 
    SELECT [userId] 
     ,[userFirstName] 
     ,[userLastName] 
     ,[userNickName] 
     ,[userPassword] 
     ,[userStreetAddress] 
     ,[userEmail] 
    FROM [dbo].[User_T] 
    WHERE [email protected] AND [email protected] 

然後在登錄頁面創建登錄文本框和登錄按鈕就像這樣:

<asp:Label ID="Label3" runat="server" Text="Username: "></asp:Label> 
 
<asp:TextBox ID="txtuserName" runat="server" CssClass="form-control "></asp:TextBox> 
 
<asp:Label ID="Label4" runat="server" Text="Password: "></asp:Label> 
 
<asp:TextBox ID="txtPassword" runat="server" CssClass="form-control "></asp:TextBox> 
 
<asp:Button ID="btnLogIn" runat="server" Text="Log In " onClick="button_login_Click" CssClass="btn btn-primary btn-block" /> 
 
    

aspx頁面背後的代碼

protected void button_login_Click(object sender, EventArgs e) 
    { 
     string userName = txtuserName.Text; 
     string userPassoword = txtPassword.Text; 

     User user = new User(userName, userPassoword); 
     cc.userLogin(user); 
    } 

這裏是我的C#代碼和所有的課我用:

Class User{ 
string name; 
string userName; 
string usePass; 
......... 
..... 
public User(string un, string pass) 
{ 
this.UserNickName = un; 
this. UserPass = pass; 
} 
// create getter and setter to each one. 
public UserNickName 
    { 
    get{return userName; } 
    set{ userName = value;} 
    } 
// the same for all my getter and setter. 

} 這裏是被稱爲處理另一個類

public handler{ // has object from DBManager.cs 
DBManager db; 
public void userLogin(User u){ db.userLogin(u);}} 

我的最後一節課是DBmanager

public DBManager{ 
// constructor has the database connection and my login method 
    public void userLogin(User user) 
    { 

     SqlCommand cmd = new SqlCommand("uselogin",_conn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     SqlParameter p1 = new SqlParameter("userNickName",  user.UserNickName); 
     SqlParameter p2 = new SqlParameter("userPassword", user.UserPassword); 
     cmd.Parameters.Add(p1); 
     cmd.Parameters.Add(p2); 
     _conn.Open(); 
     SqlDataReader rd = cmd.ExecuteReader(); 
     if (rd.HasRows) 
     { 
      rd.Read(); 

      HttpContext.Current.Response.Redirect("PublishingAnEvent.aspx", true); 
     } 
     else 
     { 
      // Label5.Text = "do it agin"; 
      HttpContext.Current.Response.Redirect("RegestrationPage.aspx", true); 
     } 

}

I希望你給我答案我做了很多閱讀,但我找不到任何東西....感謝大家。

+1

是什麼時候,你堅持登錄的結果嗎?我沒有看到表單身份驗證Cookie正在創建,也沒有看到任何值被分配的任何方面... –

+0

我如何做表單身份驗證cookie(注意:沒有登錄級別只是登錄的示例)@BrettCaswell – Abdullah

+0

north.star,(nice name btw).. FormAuthentication有一個默認的模塊加載到ASP.NET中,並指定ASP.NET處理IIS中的身份驗證。我看到的大多數實現都會覆蓋Global.asax中的OnAuthenticate ..然後他們創建一個cookie,並使用FormsAuthentication類來加密它。在每個「頁面」請求中,都有一個解密cookie的過程,用於分配用戶到'Request.User'。 –

回答

0

不做作業你,我有以下的看法:

  1. 你應該總是使用「所有者」作爲存儲過程的名稱的一部分
  2. 你應該總是使用上的任何using塊實現IDisposable(請參閱下面顯示的示例)。這有助於輕鬆正確地處理它們。
  3. 我沒有在構造函數中實例化連接,而是選擇了使用方法的模式。該方法將實例化並打開SqlConnection對象,它將處理所有錯誤。
  4. 我改變了參數創建使用一個更簡單的方法。
  5. 我拿出rd.Read()線,因爲它似乎沒有達到目的。

例如:

public DBManager 
    { 
     public void userLogin(User user) 
     { 
      using (SqlConnection _conn = GetConnection()) 
      { 
       using (SqlCommand cmd = new SqlCommand("dbo.uselogin",_conn)) 
       { 
        cmd.CommandType = CommandType.StoredProcedure; 
        cmd.Parameters.AddWithValue("@userNickName", user.UserNickName); 
        cmd.Parameters.AddWithValue("@userPassword", user.UserPassword); 
        using (SqlDataReader rd = cmd.ExecuteReader()) 
        { 
         if (rd.HasRows) 
         { 
          HttpContext.Current.Response.Redirect("PublishingAnEvent.aspx", true); 
         } 
         else 
         { 
          //. Label5.Text = "do it again"; 
          HttpContext.Current.Response.Redirect("RegistrationPage.aspx", true); 
         } 
        } 
       } 
      } 
     } 
    }