2011-09-29 111 views
4

我有一個解決方案,其中包括2個項目和2個類文件,通過引用調用。在我的一個項目中,我在Session_Start塊中的Global.asax中有一些代碼,它從數據庫加載一些變量並將它們設置爲會話變量。如果我在Global.asax中放置一個斷點,我可以驗證這些變量實際上是否正確設置。ASP.NET C#會話變量丟失

當我在我的任何代碼隱藏模塊或項目中的類中引用會話變量時,它們都在那裏。但是如果我在引用調用的類之一(本質上是共享類)中引用它們,那麼會話變量都是空的。

我使用HttpContext.Current.Session [「varName」]來訪問類中的變量,就像標準一樣。

有什麼我需要考慮有權訪問這些會話變量?它可能是一個命名空間問題?

+3

那麼,從「關注點分離」的角度來看,好像「其他」項目不應該直接意識到Web環境。你能否將會議中的任何價值傳遞給「其他項目」? – RQDQ

+0

嘗試:System.Web.HttpContext.Current.Session [「varName」]。另外,請注意您嘗試讀取會話的ASP.NET頁面生命週期的哪個階段 - 例如當您嘗試閱讀時會話尚未加載嗎? –

+0

Moe - 我正在根據用於訪問系統的URL來定製登錄屏幕上顯示的徽標。當我通過時,我在global.asax中設置了一個斷點,並首先停止,並設置變量。然後,下一個中斷點是當我的登錄模塊嘗試從數據庫加載徽標時。它從該'其他'共享類調用一個過程來處理圖像加載,並且數據庫名稱爲空。我想我可以嘗試從它正在工作的模塊獲取會話變量,並將它傳遞給加載圖像的類中的方法...我會嘗試。 –

回答

3

我以前有同樣的問題,我一直在失去我的會話變量(雖然不是在你的相同的上下文中)。我發現這篇文章對我的問題很有幫助:ASP.NET Case Study: Lost session variables and appdomain recyclesPRB: Session Data Is Lost When You Use ASP.NET InProc Session State Mode。希望它也可以幫助你。乾杯!

+0

謝謝安妮,但那不是我的問題。我正在使用SQLServer模式。我可以在我的主項目中使用會話。當我嘗試訪問外部項目中的Session vars(在相同的解決方案中)時,我遇到了問題。 –

3

你是否在代碼中的任何地方調用Session.Abandon()?在我的Web應用程序開始時,我正在這樣做,以確保我以「新鮮」會話開始。事實證明,即使之後之間存儲的任何會話變量都將被丟棄(即使SessionID被迫通過其他方式保持相同,例如使用Server.Transfer(Url,true)而不是Response.Redirect) ,在回發。

即我可以追蹤到我的應用程序,觀察所有會話變量被正確設置,然後任何事件處理程序(任何與AutoPostBack =「True」,如UpdatePanel上的複選框或按鈕)被稱爲BAM ,我有相同的SessionID,但零會話變量。

刪除對Session.Abandon()的搶先呼叫直接解決了我的問題。

Jeff