主页面上的用户ID初始化?

时间:2013-02-26 16:35:07

标签: asp.net master-pages

我有一个包含多个页面的网站,不一定是heirarchical。我想在用户第一次进入站点时查询用户的身份(使用AD ...),并根据需要创建会话状态变量以方便其他页面。用户可以在不通过default.aspx页面的情况下进入该站点,因此我认为我将代码放在Master Page的代码隐藏中。

假设这是一个好主意,相对于维护此信息的某种静态类,我开始设置它,但发现当我进入网站时,Master Page代码隐藏似乎并不总是被触发。这是一个调试现象,还是我是对的,而Master Page是放置此代码的错误位置......?

1 个答案:

答案 0 :(得分:0)

我建议使用Global.asax类。如果它尚未存在,您需要将其添加到您的网络应用程序中。一旦拥有它,您就可以使用各种事件(会话开始和结束,应用程序开始和结束以及错误)来实现特定于您所需要的业务逻辑。

我倾向于在global.asax的Application_PreRequestHandlerExecute事件中使用登录用户。这将允许您查看用户原则(例如 - User.Identity.Name)以查看谁登录(或者他们是否未登录)并执行您需要的操作(例如为用户设置会话信息等等。)。

这是我在一个.NET Web应用程序上获得的一小段代码,它使用Global.asax在Session中存储用户数据。

protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) {
  if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState) {
    SetUserItem();
  }
}

private void SetUserItem() {
  if (Session["UserItem"] == null)
    Server.Execute("~/SetSessionUserObj.aspx", true);
}

...然后是SetSessionUserObj.aspx.cs

protected void Page_Load(object sender, EventArgs e) {
  string ID = User.Identity.Name;

  MyUser myUser = new MyUser();
  UserItem userItem = myUser.GetUserItemByID(ID);

  if (userItem != null) {
    Session["UserItem"] = userItem;
  }
}

这只是您可以在global.asax中访问用户身份的一种方式。你不一定要去做一个Server.Execute来设置用户数据(我只是出于其他原因而不是这个问题的范围)。

祝你好运。