我正在与asp.net网站项目合作,一些页面需要验证。我正在使用asp.net成员资格。什么是使asp.net中的某些页面需要登录的最佳方式?
我看了一些答案。例如在文件夹中创建所有这些页面并创建描述该特权的内部web.config。这是解决问题的一种方式,但我需要更加可修复和有效的方式。
我正在与asp.net网站项目合作,一些页面需要验证。我正在使用asp.net成员资格。什么是使asp.net中的某些页面需要登录的最佳方式?
我看了一些答案。例如在文件夹中创建所有这些页面并创建描述该特权的内部web.config。这是解决问题的一种方式,但我需要更加可修复和有效的方式。
如果您不想在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 Element和The Authorization Element。
你可以试试这个代码, 在母版页加载事件编写此代码, 添加属性
公共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
文件中的登录名。
你是什么意思“更可修复和有效”?上面列出的方法有什么问题? – 2009-01-25 12:13:32