【发布时间】:2011-05-23 01:30:25
【问题描述】:
我正在尝试修复会话超时代码,但遇到了一个有趣的问题。我接受了here 和here 的建议,假设当Session.IsNewSession 为真并且会话cookie 已经存在时我已经超时。根据多个帖子,这些是发生超时的迹象。在用户登录之前,我在主页上进行了所有这些检查(在超时和注销情况下,它们会被重定向到此页面)。
所以让我们假设这一切都是正确的。当用户在应用程序中单击 LogOut 时,我运行必要的数据库代码来结束会话,然后运行:
//abandon session
Global.Session.Abandon();
//redirect
Response.Redirect(FormsAuthentication.LoginUrl, false);
当我执行会话超时检查时,我立即在主页中注意到 Session.IsNewSession 为真,最终导致认为存在会话超时的逻辑。显然不是;用户只是单击了注销。通过在全局文件中的 Session_End 中放置断点,我可以看到在用户注销时执行 Response.Redirect() 语句后会触发 Session_End。
所以我想知道这是否应该发生?最初我认为它与 Session.Abandon() 有关,但这似乎并没有导致 Session_End 触发。有什么想法吗?
谢谢。
【问题讨论】:
标签: asp.net session session-timeout