[英]ASP.NET C# Session Variables Being Lost
我有一個解決方案,其中包括 2 個項目和 2 個通過引用調用的類文件。 在我的一個項目中,我在 Session_Start 塊中的 Global.asax 中有一些代碼,它從數據庫加載一些變量並將它們設置為會話變量。 如果我在 Global.asax 中放置一個斷點,我可以驗證變量實際上是否設置正確。
當我在任何代碼隱藏模塊或項目中的類中引用類中的會話變量時,它們就在那里。 但是,如果我在通過引用調用的類之一(本質上是共享類)中引用它們,則 Session 變量都是空的。
我正在使用 HttpContext.Current.Session["varName"] 來訪問類中的變量,這是標准的。
我還需要考慮其他什么才能訪問這些會話變量嗎? 這可能是命名空間問題嗎?
我以前遇到過同樣的問題,我一直在丟失我的會話變量(盡管與您的上下文不同)。 我發現這篇文章對我的問題很有幫助: ASP.NET Case Study: Lost session variables and appdomain recycles and PRB: Session Data Is Lost When You Use ASP.NET InProc Session State Mode 。 希望它也可以幫助你。 干杯!
你在代碼的任何地方調用 Session.Abandon() 嗎? 我在我的 Web 應用程序開始時這樣做是為了確保我從“新鮮”會話開始。 事實證明,即使在“放棄”之后存儲的任何 Session 變量也將被刪除(即使 SessionID 被迫通過其他方式保持不變,例如使用 Server.Transfer(Url, true) 而不是 Response.Redirect),回發。
即我可以跟蹤到我的應用程序,觀察所有會話變量是否正確設置,然后在調用任何事件處理程序(任何帶有 AutoPostBack="True" 的東西,例如 UpdatePanel 上的復選框或按鈕)時,BAM,我有相同的 SessionID,但會話變量為零。
刪除對 Session.Abandon() 的先發制人調用直接解決了我的問題。
傑夫
在AppPool
高級設置窗口中檢查Maximum Worker Process
屬性設置為 1。
如果您無意中設置大於 1,應用程序池將是一個Web Garden
因此您無法找到Session
和Application
變量,即使它們仍然存在於其中之一中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.