Javascript 截取选项卡或浏览器的关闭

Javascript 截取选项卡或浏览器的关闭,javascript,c#,jquery,model-view-controller,devexpress,Javascript,C#,Jquery,Model View Controller,Devexpress,我应该截获浏览器或选项卡的关闭,以清除保存在redis上的应用程序会话 该程序是在ASP.net MVC中使用devexpress控件编写的 我使用了这个函数 $(窗口).bind('beforeunload',函数() 但我无法区分页面更改、浏览器返回和关闭事件 你能给我一个建议吗? 谢谢!在JavaScript中无法确定页面更改与用户单击后退按钮(本质上与页面更改相同)之间的区别,或用户单击“关闭”按钮。他们都在“卸载”页面。浏览器不会发送其他信息来告诉您导致页面卸载的原因。而且,依靠此卸载

我应该截获浏览器或选项卡的关闭,以清除保存在redis上的应用程序会话 该程序是在ASP.net MVC中使用devexpress控件编写的

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

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

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

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

如果要将带有C#代码的服务器端事件绑定到会话结束事件,可以将事件处理程序放入global.aspx文件中。不需要依赖JavaScript。但需要等待会话超时。例如:

进一步阅读:

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

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