我有一个有多个页面的网站,不一定是分层的。我想在用户第一次进入站点时查询用户的身份(使用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中访问用户身份的一种方式。您不一定要去做一个服务器。执行以设置用户数据(我这样做是出于其他原因,不属于这个问题的范围)。
好运。