ASP.. NET c#会话变量丢失

本文关键字:变量 会话 NET ASP | 更新日期: 2023-09-27 18:10:01

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

当我在任何代码背后模块或项目中的类中引用类中的会话变量时,它们就在那里。但是,如果我在一个通过引用调用的类(本质上是一个共享类)中引用它们,那么Session变量都是空的。

我使用HttpContext.Current。会话["varName"]访问类中的变量,这是标准的。

我是否需要考虑访问这些会话变量?这可能是名称空间的问题吗?

ASP.. NET c#会话变量丢失

我以前也遇到过同样的问题,我一直在失去我的会话变量(虽然不是在与您相同的上下文中)。我发现这篇文章对我的问题很有帮助:ASP。. NET案例研究:丢失的会话变量和应用域回收和PRB:使用ASP时丢失的会话数据。. NET InProc会话状态模式。希望这对你也有帮助。干杯!

您是否在代码的任何地方调用Session.Abandon() ?我在我的Web应用程序开始时这样做,以确保我从一个"新鲜"的会话开始。结果是,存储在"Abandon"之后的任何会话变量都将被删除(即使SessionID通过其他方式(例如使用Server)被迫保持不变)。在回发时传输(Url, true)而不是Response.Redirect)。

。我可以跟踪到我的应用程序,观察所有会话变量被正确设置,然后任何事件处理程序(任何与AutoPostBack="True",如UpdatePanel上的复选框或按钮)被调用,BAM,我有相同的SessionID,但零会话变量。

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

杰夫

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

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

点击这里查看更多信息