2009-08-18 8 views
0

私は、次の設定を使用する場合、私は保護されたページにリダイレクトするServer.Transferを()/のResponse.Redirect()を使用することができません:asp.net種類保護されたページの問題の1

<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を使用します。これにより、Cookieが設定され、ユーザーがリダイレクトされます。

関連する問題