2013-02-26 47 views
1

我有一個網站有多個網頁,不一定heirarchical。我想在用戶第一次進入站點時查詢用戶的身份(使用AD ...),並根據需要創建會話狀態變量以方便其他頁面。用戶可能不經過default.aspx頁面就進入網站,所以我想我會把代碼放在主頁的代碼隱藏中。主頁上的用戶ID初始化?

假設這是一個好主意,與維持這些信息的某種靜態類相比,我開始設置它,但是發現當我輸入主頁代碼後並不總是被解僱現場。這是一個調試現象,還是我是對的,主頁是放錯這個代碼的地方......?

回答

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來設置用戶數據(我只是做了其他原因超出了這個問題的範圍)。

祝你好運。

+0

謝謝Jagd。如果我從我的研究中正確理解,Global.asax文件會將事件暴露給我的網站,否則我無法看到。我不確定哪些事件,但我會繼續我的研究。聽起來像你推薦PreRequest ...事件。我相信我可以使用global.asax指向一個擁有所有事件處理程序的類。那麼,我可以在這些事件處理程序中設置會話變量? – 2013-02-26 19:31:28