2009-08-18 6 views
0

나는 다음과 같은 설정을 사용하는 경우, 나는 보안 페이지로 리디렉션 Server.Transfer를()/Response.Redirect를()를 사용할 수 없습니다입니다 :asp.net 일종의 보안 페이지 문제 중 하나

<authentication mode="Forms"> 
     <forms 
      name="CookieDemo" 
      loginUrl="Default.aspx" 
      protection="All" 
      timeout="30" 
      path="/" 
     /> 
     </authentication> 
     <authorization> 
     <deny 
      users="?" 
     /> 

Default.aspx를 제외한 모든 페이지를 보호해야합니다.

이 문제를 해결하려면 어떻게해야합니까?

asp.net의 기본 제공 멤버 자격 공급자를 사용하고 있지 않습니다.

protected void Page_Load(object sender, EventArgs e) 
     { 
      AspNetUtil util = new AspNetUtil(this); 

      //util.DisposeCookie("user"); 

      UserTypeEnum userType = EnumUtility.ConvertToEnum(util.GetCookieValue("user", "usertype")); 
      string username = util.GetCookieValue("user", "username"); 

      if (userType == UserTypeEnum.Student) 
      { 
       //Server.Transfer("~/Student/StudentControlPanel.aspx?username=" + username); 
       Response.Redirect("~/Student/StudentControlPanel.aspx?username=" + username); 
      } 
      else if (userType == UserTypeEnum.Teacher) 
      { 
       //Server.Transfer("~/Teacher/TeacherControlPanel.aspx?username=" + username); 
       Response.Redirect("~/Teacher/TeacherControlPanel.aspx?username=" + username); 
      } 
     } 

protected void btnLogin_Click(object sender, EventArgs e) 
     { 
      string username = this.usernameTextBox.Text; 
      string password = this.passwordTextBox.Text; 

      bool success = Ice_Web_Portal.BO.User.LogIn(username, password); 

      if (success) 
      { 
       Ice_Web_Portal.BO.User user = Ice_Web_Portal.BO.User.GetUserByUserName(username); 

       Ice_Web_Portal.BO.UserTypeEnum loginUserType = user.UserTypeEnum; 

       if (loginUserType == UserTypeEnum.Student) 
       { 
        AspNetUtil util = new AspNetUtil(this); 
        util.SaveInCookie("user", "username", username, 3600); 
        util.SaveInCookie("user", "usertype", "Student", 3600); 

        //Server.Transfer("~/Student/StudentControlPanel.aspx?username=" + username); 
        Response.Redirect("~/Student/StudentControlPanel.aspx?username=" + username); 
       } 
       else if (loginUserType == UserTypeEnum.Teacher) 
       { 
        AspNetUtil util = new AspNetUtil(this); 
        util.SaveInCookie("user", "username", username, 3600); 
        util.SaveInCookie("user", "usertype", "Teacher", 3600); 

        //Server.Transfer("~/Teacher/TeacherControlPanel.aspx?username=" + username);     
        Response.Redirect("~/Teacher/TeacherControlPanel.aspx?username=" + username); 
       } 
       else 
       { 
        labLoginMessage.Text = "Sorry! Type of user couldn't be determined!"; 
       } 
      } 
      else 
      { 
       labLoginMessage.Text = Ice_Web_Portal.BO.User.LoginMessage; 
      } 
     } 

이 것은 하나 작동하지 않습니다 :

<location path="Default.aspx"> 
    <system.web> 
     <authorization> 
     <allow users="*"></allow> 
     </authorization> 
    </system.web> 
    </location> 

답변

2

ASP.NET 폼 인증은 사용자가 인증되었는지 확인하기 위해 사용하는 고유 한 쿠키가

여기에 내 리디렉션 코드입니다. Response.Redirect 또는 Server.Transfer를 사용하는 대신 System.Web.Security.FormsAuthentication.RedirectFromLoginPage를 사용하면 쿠키를 설정하고 사용자를 리디렉션합니다.