2008-11-16 56 views
14

我有一個自定義的安全主體對象,我在當前線程的global.asax中設置並且一切都很好,通常沒有問題。在global.asax中爲空Asp.net System.Web.HttpContext.Current.Session

但是,我只是添加一個動態圖像功能,通過一個頁面提供圖像和每當該動態圖像頁面加載System.Web.HttpContext.Current.Session爲null,global.asax,它可以防止我從把安全主體設置爲正常以及從這一點開始級聯問題。

通常情況下,會話在global.asax中僅在用戶登錄時的開始會話中爲空,之後它始終可用於此單個異常。

當瀏覽器遇到一個像踏歌在原始頁面即

我猜,這將動態圖像加載頁面是對瀏覽器請求頁面,不發送一些憑據實際上有些方面用它?

任何幫助將不勝感激。

回答

25

約翰,

我假設你正在使用的處理器的ASHX處理程序。如果是這樣,請務必從IRequiresSessionState派生例如:

public class Images : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
{ } 

如果你能描述你的動態圖像網頁是什麼意思你不使用一個ASHX?

喬希

3

會話與登錄或不登錄無關。

當你想要訪問會話時,你要重寫什麼事件?在AcquireRequestState被觸發之前會話不可用。

欲瞭解更多信息,請參見:http://msdn.microsoft.com/en-us/library/9ysfzy8h.aspx

+1

會話與我的自定義業務原則有關。問題在於會話只爲這一頁爲空,在這個大型應用程序中有50個左右的人不會出現這個問題。我從Application_PostAuthenticateRequest訪問會話,通常不是問題。 – JohnC 2008-11-16 01:55:53

+1

爲了這個問題,只是忽略整個業務主體部分,根本問題是Session只對這一類頁面爲null。 – JohnC 2008-11-16 01:56:52

0

是的,你是對的這是因爲在其他頁轉移中並行的情況下,該對象扶養威力conficts可能打破會議

在Global.asax.cs中在session_start
8

之間的防火牆()和Session_End()你需要使用「this.Session」! 原因是HttpContext僅在存在正在處理的請求時可用。這就是爲什麼你在HttpContext.Current.Session上獲得NULL值的原因!

來自Microsoft網站: 「HttpContext類:封裝有關單個HTTP請求的所有HTTP特定信息。」

但是不要感覺不好......我也爲此而墮落! :)