返回首页

问题
虽然浏览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和昂贵代码挂接到会议开始/结束事件,那么我建议你到您的会话启动程序添加一个虚拟的会话变量。这解决了萎靡不振的会议中使用的问题,并有助于保护您的服务器资源,从过多的会议活动。

回答

评论会员:游客 时间:2012/02/04
我不知道这个事件的限制你说得对,为维护和稳定的缘故,同样的代码应与所有的会话持久化策略
弗洛里安DREVET:很有趣的文章,感谢您与我们分享

我从这个错误遭受前一些monthes,当我写一个ASP.NET会话管理,其目标是"绑定"ASP.NET会话(使用Spring.Net触发器)与NHibernate的实体每请求图案NHibernate会话。{BR }
| jacwak:这会解决这个问题太
评论会员:TheCodeKing 时间:2012/02/04
没错,我加入这个最后一段
{A3的}
评论会员:jokertin92 时间:2012/02/04
决策的cookieless ="true"会解决这个问题
你能告诉我如何添加在session_start的虚拟会话变量
评论会员:jacwak 时间:2012/02/04
东西像Session.Add("虚拟","虚")