ASP.NET WebForms - 会话变量为空

3
我有一个iframe保持活跃(每隔几分钟在我的网站上触发一个名为defibrillator.aspx的页面,以保持会话活动)在我的asp.net应用程序的主页上。这通常有效,但是偶尔在我的除颤器页面加载期间,我的会话变量返回null。起初,我认为服务器因某种原因超时了会话,所以我在global.asax中的Session_End事件中添加了一些日志记录,但从未被触发。

有什么想法可能导致会话丢失吗?


你的会话状态模式是什么?InProc吗? - Josh Stodola
4个回答

2
许多事情都可能导致会话丢失。应用程序池重新启动、iisreset,客户端可能会丢失其会话cookie等等。如果不知道更多信息,很难确定问题所在。
如果会话如此重要,以至于您轮询应用程序以防止工作进程休眠,也许您应该考虑将会话状态保持到SQL Server中。请参阅此处


1

我曾经遇到过同样的问题,将购物车状态存储在Session中,但是它会随机返回null。我认为我在Bertrand Le Roy的博客上找到了答案,这似乎对我有用:

会话丢失问题也可能是应用程序池配置不正确导致的。例如,如果运行您网站的应用程序池被配置为Web Farm或Web Garden(通过将最大工作进程数设置为超过一个),并且如果您没有使用会话服务或SQL会话,则传入请求将不可预测地转到其中一个工作进程,如果不是创建会话的那个进程,则会话就会丢失。解决此问题的方法要么不使用Web Garden(如果您不需要性能提升),要么使用其中一个外部进程会话提供程序。

博客


0
如果选择的持久化机制是InProc,那么它可以被许多事情触发。在生产环境中完全不推荐使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接