簡體   English   中英

ASP.NET C# 會話變量丟失

[英]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因此您無法找到SessionApplication變量,即使它們仍然存在於其中之一中。

點擊這里查看更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM