我正在尝试修复会话超时代码,并遇到了一个有趣的问题。我已经采用了here和here建议,假设我Session.IsNewSession
为真并且会话cookie已经存在,我已达到超时。根据多个帖子,这些都是发生超时的迹象。在用户登录之前我在我的主页上进行的所有这些检查(在超时和注销情况下它们被重定向到此页面)。
所以我们假设这一切都是正确的。当用户单击应用程序中的LogOut时,我运行必要的数据库代码来结束会话,然后我运行它:
//abandon session
Global.Session.Abandon();
//redirect
Response.Redirect(FormsAuthentication.LoginUrl, false);
当我执行会话超时检查时,我立即在我的主页上注意到的是,Session.IsNewSession是真的,最终导致认为存在会话超时的逻辑。显然不是;用户只需单击“注销”。通过在我的Global文件中的Session_End中放置一个断点,我可以看到在用户注销后执行Response.Redirect()语句后会触发Session_End。
所以我想知道是否会发生这种情况?最初我认为它与Session.Abandon()有关,但这似乎并没有导致Session_End触发。有什么想法吗?
感谢。
答案 0 :(得分:2)
仅在当前请求完成后才会触发Session_End事件。重定向是请求的结束,因此事件在此时触发。重定向本身并不会结束当前会话。