我有一个包含多个页面的网站,不一定是heirarchical。我想在用户第一次进入站点时查询用户的身份(使用AD ...),并根据需要创建会话状态变量以方便其他页面。用户可以在不通过default.aspx页面的情况下进入该站点,因此我认为我将代码放在Master Page的代码隐藏中。
假设这是一个好主意,相对于维护此信息的某种静态类,我开始设置它,但发现当我进入网站时,Master Page代码隐藏似乎并不总是被触发。这是一个调试现象,还是我是对的,而Master Page是放置此代码的错误位置......?
答案 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来设置用户数据(我只是出于其他原因而不是这个问题的范围)。
祝你好运。