2013-07-11 2 views
0

나는 asp.net C#을 사용하여 만든 간단한 로그인 페이지를 가지고 있습니다. 무슨 일을하려고하는 사용자 수준을 검색하고 세션에 할당하고 수준에 따라 적절한 페이지로 리디렉션됩니다. 하지만 로그인 할 때 아무 일도 일어나지 않습니다. 아래 코드는 내 코드입니다. 누군가 내 코드에 어떤 문제가 있다고 말할 수 있습니까? 당신이 intSession["level"]을 캐스팅 한 후 string와 동일한 지 어떤지를 확인 (또는를 시도)되어 우선 들어asp.net에서 세션을 사용하여 로그인 레벨 인증 C#

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 Injection Attacks] (http://en.wikipedia.org/wiki/SQL_injection)를 시도합니다. –

+1

왜 디버거로 단계별 실행을하지 않고 쿼리가 반환하는지 확인하고 Session [ "level"]'할당을 확인하십시오. –

+0

@LiveEn : sqlread.Read()가 false를 반환하면 어떻게됩니까? 그 사건을 테스트해야합니다. – Taylor

답변

1

. 이차적으로 검사 할 값에 작은 따옴표를 사용하고 있습니다. 이 코드 컴파일합니까? 예외 처리이 있습니까? 내 추측으로는 오류가있어 전혀 실행되지 않는다는 것입니다. 전체 코드를 게시 할 수 있습니까?

TheGeekYou는 맞습니다. 먼저 확인하려는 정수 값에서 작은 따옴표를 제거해야합니다.

+0

op가 문자열이 아닌 char에 대해 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

관련 문제