我有一个iframe保持活跃(每隔几分钟在我的网站上触发一个名为defibrillator.aspx的页面,以保持会话活动)在我的asp.net应用程序的主页上。这通常有效,但是偶尔在我的除颤器页面加载期间,我的会话变量返回null。起初,我认为服务器因某种原因超时了会话,所以我在global.asax中的Session_End事件中添加了一些日志记录,但从未被触发。
有什么想法可能导致会话丢失吗?
我曾经遇到过同样的问题,将购物车状态存储在Session中,但是它会随机返回null。我认为我在Bertrand Le Roy的博客上找到了答案,这似乎对我有用:
会话丢失问题也可能是应用程序池配置不正确导致的。例如,如果运行您网站的应用程序池被配置为Web Farm或Web Garden(通过将最大工作进程数设置为超过一个),并且如果您没有使用会话服务或SQL会话,则传入请求将不可预测地转到其中一个工作进程,如果不是创建会话的那个进程,则会话就会丢失。解决此问题的方法要么不使用Web Garden(如果您不需要性能提升),要么使用其中一个外部进程会话提供程序。