问题
虽然浏览StackOverflow的,我碰到一个老从2月10日,这引起了我的眼睛。
起初,我是快速解雇废话,但后来我开始进一步寻找到它,并产生了兴趣。似乎很多人都汇报一个问题,即有时被称为后,立即在session_start Session_End。
这可以复制。NET 2.0/3.5使用以下步骤。创建一个新的。NET 2.0的WebForms WebApplication的
配置为InProc会话,并设置超时为1分钟添加session_start的和Session_End活动的突破点调试应用程序和F5跳过第一session_start的突破点1分钟后等待,直到Session_End火灾刷新浏览器,session_start的呼吁后,立即通知Session_End请注意,添加一个session变量的页面的OnLoad解决问题
{A1},有2个活动,可能会导致火灾的Session_End事件。当调用Session.Abandon()
在会议结束后立即过期
在这个例子中,无论是真实的。因此,如何能这样呢?答案
在互联网上做一些研究,我发现} {A2的线索会话状态。它发现一个有趣怪癖,如何处理会话状态。
这是ASP.NET将创建一个新的InProc会话,如果会话实际上是由应用程序使用。如果没有,那么该会议不坚持,它甚至不会发出一个会话cookie(它已经不存在)。
所以这里发生了什么事。
当浏览器中刷新会话超时后,旧的会话cookie发送请求。这会导致ASP.NET重用原来的一个新的会话的会话ID。然而,因为在最终的应用程序尚未使用的会话请求,ASP.NET有效地放弃它,以避免持久性和释放资源。这会导致早期的Session_End事件。
现在,因为ASP.NET实际上不删除预先存在的会话cookie,每个后续请求基本上是重新启动会话ID和重复序列的事件,,在session_start / Session_End,直到会话使用或多次被解雇cookie的删除。修复
这个问题已经解决。NET 4.0中。我怀疑的会议现在仍然坚持在一个会话重新启动的情况下。
如果你的应用程序使用。NET 2.0/3.5和昂贵代码挂接到会议开始/结束事件,那么我建议你到您的会话启动程序添加一个虚拟的会话变量。这解决了萎靡不振的会议中使用的问题,并有助于保护您的服务器资源,从过多的会议活动。