2013-07-11 44 views
0

即時通訊有一個簡單的登錄頁面,我使用asp.net c#創建。我試圖做的是檢索用戶級別並將其分配給會話並根據級別重定向到適當的頁面。但是,當我登錄什麼發生..下面是我的代碼。有人能告訴我我的代碼有什麼問題嗎?在asp.net中使用會話驗證登錄級別#

con.Open(); 
     com.CommandText = "Select * from deatls Where c_id = '" + TextBox1.Text + "' and password = '" + TextBox2.Text + "'"; 
     com.CommandType = CommandType.Text; 
     com.Connection = con; 

     SqlDataReader sqlread = com.ExecuteReader(); 


     if (sqlread.Read()) 
     { 
      Session["level"] = sqlread["level"]; 
     } 


     if ((int)Session["level"] == '1') 

      Response.Redirect("customer_menu.aspx"); 

     if ((int)Session["level"] == '2') 

      Response.Redirect("front.aspx"); 

     if ((int)Session["level"] == '3') 

      Response.Redirect("manager.aspx"); 

     else 
      Response.Redirect("login.aspx"); 

     con.Close(); 
+2

也就是一些真正具有安全缺陷SQL代碼。請不要在生產中使用它,這正是黑客試圖做的[SQL注入攻擊](http://en.wikipedia.org/wiki/SQL_injection)。 –

+1

爲什麼不用一個調試器遍歷它,檢查查詢返回的是什麼,檢查Session [「level」]是否被賦值等。 –

+0

@LiveEn:如果sqlread.Read()返回false會發生什麼?你需要測試這種情況。 – Taylor

回答

1

爲你鑄造Session["level"]int,然後用string平等檢查(或試圖)首發。其次,你使用單引號作爲你想檢查的值。這段代碼是否編譯?你有異常處理?我的猜測是,它的錯誤,並沒有運行。你能發佈完整的代碼嗎?

TheGeekYouNeed是正確的。您應該先嚐試從要檢查的整數值中刪除單引號。

+0

op正在檢查int而不是字符串 –

+0

此外,由於SQL注入的可能性,通常會避免此類用戶身份驗證查詢。你應該閱讀一下。 – Taylor

+3

由於該值正在轉換爲int,因此需要刪除單引號。 – TheGeekYouNeed

2

您的代碼乞討switch聲明,就像這樣:

switch (Session["level"].ToString()) 
{ 
    case "1": 
     Response.Redirect("customer_menu.aspx"); 
     break; 
    case "2": 
     Response.Redirect("front.aspx"); 
     break; 
    case "3": 
     Response.Redirect("manager.aspx"); 
     break; 
    default: 
     Response.Redirect("login.aspx"); 
     break; 
} 
+0

我完全同意。我肯定會在這裏使用switch語句。 – Taylor