我的主页上有一个asp.net应用程序,我有一个iframe保持活着(在我的网站上每隔几分钟点击一个页面,defibrillator.aspx,以保持会话处于活动状态)。这在大多数情况下都有效,但在我的除颤器页面上的页面加载期间,我的会话变量经常返回null。起初,我认为会话由于某种原因被服务器超时,所以我将一些日志记录到global.asax中的Session_End事件中,但它从未被命中过。
任何可能导致会话丢失的想法。
答案 0 :(得分:2)
很多事情都可能导致会话丢失。一个AppPool回收,iisreset,客户端可能会丢失其会话cookie等。不知道更多,很难说出问题是什么。
如果会话非常重要,您可以轮询应用程序以防止工作进程休眠,那么您应该查看persisting your session state to SQL Server。
答案 1 :(得分:2)
答案 2 :(得分:1)
我遇到了同样的问题,在Session中存储购物车状态,但让它随机返回null。我想我在Bertrand Le Roy的博客上找到了答案,这似乎对我有用:
还可能导致会话丢失问题 来自错误配置的应用程序池。 例如,如果是应用程序池 您的网站正在运行配置为 网络农场或网络花园(通过设置 最大工作进程数 不止一个),如果你不是 使用会话服务或SQL 会话,传入请求将 不可预知地去找其中一个工人 进程,如果它不是那个 会话已创建,它已丢失。该 解决这个问题的方法之一 如果不这样做,不要使用网络花园 需要性能提升,或使用一个 进程外会话 提供者。
答案 3 :(得分:0)
如果选择的持久性机制是InProc,那么很多东西都可以触发它。完全反建议用于生产环境。