【问题标题】:How to call Session_End when a browser is closed?关闭浏览器时如何调用 Session_End?
【发布时间】:2015-08-18 11:43:53
【问题描述】:

我有两个问题。我将把我的问题分成两部分并给出一个概述。我不完全确定我需要发布的代码,所以如果我遗漏了一些,请告诉我,我会提供帮助。

概述:

当浏览器关闭时,我需要注销用户。

问题一:

浏览器关闭时如何调用Session_End?

我阅读了有关如何关闭它的信息,似乎在浏览器结束时检测会话是否结束的唯一方法是在我的网络配置中使用名为“InProc”的东西。我尝试了一下,它似乎并没有改变任何东西。所以我想知道是否有其他方法可以解决这个问题。

会话结束:

 protected void Session_End() {
            if (User.Identity.IsAuthenticated) {

            }
        }

问题 2:如何在 Session_End 上注销用户?

一旦程序调用了 void,我需要将用户注销,因为它会导致我的程序出现错误。我正在使用身份验证管理器。

会话结束:

protected void Session_End() {
            if (User.Identity.IsAuthenticated) {
                AuthenticationManager.SignOut();
            }
        }

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

使用 InProc 会话,会话超时时会调用 Session_End 方法。这是(默认情况下)20 分钟后用户最后一次访问您的网站(请求新页面)。请注意,这 20 分钟可以用来仔细阅读您网站的一个页面 - 他的会话仍然关闭。

没有方法可以检测用户何时关闭浏览器或离开您的网站。

【讨论】:

    【解决方案2】:

    您需要使用 Global.asax 文件。它应该已经包含此方法,您需要做的就是添加代码的内容。

    protected void Session_End(object sender, EventArgs e)
    {
        if (User.Identity.IsAuthenticated)
        {
            AuthenticationManager.SignOut();
        }
    }  
    

    【讨论】:

    • 是的,但是当浏览器关闭时仍然不会调用 Session_End。显然您无法检测到浏览器何时关闭并运行代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多