【问题标题】:asp.net one of a kind Secured Page problemasp.net 一种安全页面问题
【发布时间】:2009-08-18 21:35:54
【问题描述】:

如果我使用以下设置,我将无法使用 Server.Transfer()/Response.Redirect() 重定向到安全页面:

<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>

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    ASP.NET Forms 身份验证有自己的 Cookie,用于确定用户是否已通过身份验证。不要使用 Response.Redirect 或 Server.Transfer,而是使用 System.Web.Security.FormsAuthentication.RedirectFromLoginPage,它将设置 cookie 并重定向用户。

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多