ASP.NET C#会话变量丢失

时间:2011-09-29 23:55:17

标签: c# asp.net session

我有一个解决方案,其中包括2个项目和2个通过引用调用的类文件。在我的一个项目中,我在Session_Start块中的Global.asax中有一些代码,它从数据库加载一些变量并将它们设置为会话变量。如果我在Global.asax中设置一个断点,我可以验证变量实际上是否正确设置。

当我在任何代码隐藏模块或项目中的类中引用类中的会话变量时,它们就在那里。但是如果我在其中一个通过引用调用的类(实质上是共享类)中引用它们,则Session变量都为null。

我正在使用HttpContext.Current.Session [“varName”]来访问类中的变量,这是标准的。

我是否还需要考虑其他方法才能访问这些会话变量?它可能是命名空间问题吗?

3 个答案:

答案 0 :(得分:5)

之前我遇到过同样的问题,我一直在丢失我的会话变量(尽管与你的会话变量不在同一个环境中)。我发现这些文章对我的问题很有帮助:ASP.NET Case Study: Lost session variables and appdomain recyclesPRB: Session Data Is Lost When You Use ASP.NET InProc Session State Mode。希望它也可以帮到你。干杯!

答案 1 :(得分:3)

您是否在代码中的任何位置调用Session.Abandon()?我在我的Web应用程序开始时这样做,以确保我从一个“新鲜”的会话开始。事实证明,任何存储在“放弃”之后的会话变量都将被删除(即使SessionID被强制通过其他方式保持相同,例如使用Server.Transfer(Url,true)而不是比起Response.Redirect),在回发时。

即。我可以追踪到我的应用程序,观察所有会话变量是否正确设置,然后当任何事件处理程序(任何具有AutoPostBack =“True”的东西,如UpdatePanel上的复选框或按钮)被调用,BAM,我有同样的SessionID,但零会话变量。

删除对Session.Abandon()的先发制人调用直接解决了我的问题。

杰夫

答案 2 :(得分:0)

Maximum Worker Process高级设置中检查AppPool属性设置为1 窗口。

如果您无意中将其设置为大于1,则应用程序池将为Web Garden,因此即使它们中仍然存在SessionApplication变量,您也找不到它们。

Click here for more information