【问题标题】:ASP.NET: Does Response.Redirect() end the current session?ASP.NET:Response.Redirect() 是否结束当前会话?
【发布时间】:2011-05-23 01:30:25
【问题描述】:

我正在尝试修复会话超时代码,但遇到了一个有趣的问题。我接受了herehere 的建议,假设当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


    【解决方案1】:

    仅在当前请求完成后触发 Session_End 事件。重定向是您的请求的结束,因此事件会在那时触发。重定向本身不会结束当前会话。

    【讨论】:

    • 我假设会话在该请求期间已经结束,因为我说的是 Session.Abandon()?
    • 是的,你强迫它以 Abandon 调用结束
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2021-08-09
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多