我有一個網站有多個網頁,不一定heirarchical。我想在用戶第一次進入站點時查詢用戶的身份(使用AD ...),並根據需要創建會話狀態變量以方便其他頁面。用戶可能不經過default.aspx頁面就進入網站,所以我想我會把代碼放在主頁的代碼隱藏中。主頁上的用戶ID初始化?
假設這是一個好主意,與維持這些信息的某種靜態類相比,我開始設置它,但是發現當我輸入主頁代碼後並不總是被解僱現場。這是一個調試現象,還是我是對的,主頁是放錯這個代碼的地方......?
我有一個網站有多個網頁,不一定heirarchical。我想在用戶第一次進入站點時查詢用戶的身份(使用AD ...),並根據需要創建會話狀態變量以方便其他頁面。用戶可能不經過default.aspx頁面就進入網站,所以我想我會把代碼放在主頁的代碼隱藏中。主頁上的用戶ID初始化?
假設這是一個好主意,與維持這些信息的某種靜態類相比,我開始設置它,但是發現當我輸入主頁代碼後並不總是被解僱現場。這是一個調試現象,還是我是對的,主頁是放錯這個代碼的地方......?
我會推薦使用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來設置用戶數據(我只是做了其他原因超出了這個問題的範圍)。
祝你好運。
謝謝Jagd。如果我從我的研究中正確理解,Global.asax文件會將事件暴露給我的網站,否則我無法看到。我不確定哪些事件,但我會繼續我的研究。聽起來像你推薦PreRequest ...事件。我相信我可以使用global.asax指向一個擁有所有事件處理程序的類。那麼,我可以在這些事件處理程序中設置會話變量? – 2013-02-26 19:31:28