2009-01-25 74 views
6

我正在与asp.net网站项目合作,一些页面需要验证。我正在使用asp.net成员资格。什么是使asp.net中的某些页面需要登录的最佳方式?

我看了一些答案。例如在文件夹中创建所有这些页面并创建描述该特权的内部web.config。这是解决问题的一种方式,但我需要更加可修复和有效的方式。

+0

你是什么意思“更可修复和有效”?上面列出的方法有什么问题? – 2009-01-25 12:13:32

回答

20

如果您不想在web.config中对此进行硬编码,则需要实现“基页”类型的控件。

您的基页类应该继承System.Web.UI.Page,并且需要有一个方法可以调用说“用户必须登录”或“用户必须在角色x中”,并且if用户不在该角色中,重定向到登录页面(您可以通过调用FormsAuthentication.LoginUrl来获取此内容)。

您的实际页面应该继承此类,而不是直接从System.Web.UI.Page继承。然后,像初始化,或者在Page_Load中的顶部,叫

base.UserMustBeLoggedIn(); 

// Replace "AccessRole" with the name of your role 
base.UserMustBeInRole("AccessRole"); 

而让基页处理这个问题。

如果您希望将访问权限存储在数据库中,那么您可以将所有处理移动到基本页面,并在页面生命周期的适当位置,根据数据库表格检查当前URL,检查用户根据需求进行角色/身份验证,并根据需要重定向。


注意,您可以在Web配置页面创建安全级别,像这样:

<configuration> 
    <location path="LockedPage.aspx"> 
    <system.web> 
     <authorization> 
     <!-- Deny access to anonymous users --> 
     <deny users="?"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 

更多信息,请访问MSDN:The Location ElementThe Authorization Element

3

你可以试试这个代码, 在母版页加载事件编写此代码, 添加属性

公共BOOL m_bLoginRequired = TRUE;

public bool IsLoginRequired 
{ 
    get { return m_bLoginRequired; } 
    set { m_bLoginRequired = value; } 
} 



try 
     { 
      // Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache); 
      Response.Cache.SetNoStore(); 
      if (IsLoginRequired==true) 
      { 
        if (Session.IsNewSession || HttpContext.Current.Session["Username"] == null) 
        { 
         FormsAuthentication.SignOut(); 
         FormsAuthentication.RedirectToLoginPage("Session Expired"); 
         Response.End(); 
        } 
       } 
      } 
     catch (Exception ex) 
     { 
      throw (ex); 
     } 

现在登录页面,你需要编写代码

FormsAuthentication.SetAuthCookie(this.txt_UserName.Text.Trim(), false); FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txt_UserName.Text.Trim(), DateTime.Now, DateTime.Now.AddMinutes(10), false, "HR"); 
      HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket)); 
      cookie.Name = "jay"; 
      Session["UserName"] = txt_UserName.Text.Trim(); 
      Response.Cookies.Add(cookie); 
      txt_UserName.Text = ""; 
      txt_Password.Text = ""; 
      Response.Redirect("HomePage2.aspx"); 

现在你AVE在登录页面

protected void Page_PreInit(object sender, EventArgs e) 
    { 
     Master.IsLoginRequired = false; 
    } 

添加pageinit事件,如果你想用户可以访问一个未经授权的页面,然后在该页面的pageinit事件中使用

设置Master.IsLoginRequired=false;

还指定web.config文件中的登录名。