在母版页上初始化用户ID



我有一个有多个页面的网站,不一定是分层的。我想在用户第一次进入站点时查询用户的身份(使用AD…),并创建会话状态变量,以便根据需要方便其他页面。用户可以不经过默认设置进入站点。所以我想我应该把代码放在母版页的代码隐藏中。

假设这是一个好主意,而不是维护这些信息的某种静态类,我开始设置它,但发现当我进入站点时,母版页代码隐藏似乎并不总是被解雇。这是一个调试现象,或者我是对的,母版页是错误的地方,把这段代码…?

我建议使用Global。asax类。你需要将它添加到你的web应用程序,如果它还没有。一旦你有了它,你就可以使用各种事件(会话开始和结束,应用程序开始和结束以及错误)来实现你所需要的业务逻辑。

我倾向于在global.asax的application_preequesthandlerexecute事件中对登录的用户进行胡闹。这将允许您查看用户原则(例如- User. identity . name),以查看谁登录了(或者如果他们没有登录),并执行您需要的操作(例如为用户设置会话信息,等等)。

这是我在一个使用全局的。net web应用程序上得到的一小段代码。用于在会话中存储用户数据。

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中访问用户身份的一种方式。您不一定要去做一个服务器。执行以设置用户数据(我这样做是出于其他原因,不属于这个问题的范围)。

好运。

最新更新