【问题标题】:Intercept the closing of the tab or browser拦截选项卡或浏览器的关闭
【发布时间】:2020-01-29 18:15:26
【问题描述】:

我应该拦截浏览器或选项卡的关闭,以清理保存在 redis 上的应用程序会话 该程序是用带有 devexpress 控件的 ASP.net MVC 制作的。

我使用了函数 $ (window) .bind ('beforeunload', function () 但我无法区分页面更改、浏览器返回和关闭事件。

你能给我一个建议吗? 谢谢!

【问题讨论】:

    标签: javascript c# jquery model-view-controller devexpress


    【解决方案1】:

    JavaScript 无法确定页面更改、用户单击后退按钮(本质上与页面更改相同)或用户单击关闭按钮之间的区别。他们都在“卸载”页面。浏览器不会发送其他信息来告诉您导致页面卸载的原因。而且,依靠这个卸载事件来清除会话并不是一个好的做法。其他事情可能会关闭浏览器而不会完全触发该事件。这是人们在 JavaScript 中使用页面卸载事件时面临的常见问题。通常,您不应依赖它来管理服务器端任务。

    假设您使用的是 ASP.NET,会话将根据 Session.Timeout 值自动超时。通常这是 30 分钟,但可以根据设置进行更改:

    Session timeout in ASP.NET

    如果您想将带有 C# 代码的服务器端事件绑定到 Session-End 事件,您可以通过在 global.aspx 文件中放置一个事件处理程序来实现。您不需要依赖 JavaScript。不过,您确实需要等待会话超时。例如:

    https://docs.microsoft.com/en-us/dotnet/api/system.web.sessionstate.sessionstatemodule.end?view=netframework-4.8

    进一步阅读: When is Session_End() called in ASP.NET MVC?

    上面的代码示例将放入您的 global.aspx.cs 文件中:

    protected void Session_End(object sender, EventArgs e)
    {
        //do whatever you need to here
        System.Diagnostics.Debug.WriteLine("Session_End");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 2015-12-27
      • 1970-01-01
      • 2016-07-11
      • 2012-06-09
      • 1970-01-01
      • 2013-10-17
      相关资源
      最近更新 更多