如何在ASP.NET的服务器端检测浏览器关闭?

7

我想知道在asp.net 2.0的服务器端浏览器何时关闭。如何在后台代码中检测?

4个回答

9
简短回答:由于http是无状态的,您不能直接这样做。也许您可以使用一些AJAX心跳池、会话超时检测和其他技巧。
请查看这个问题以获取更多解释和想法。这是基于Java的,但想法是与语言无关的。

4
客户端脚本:
< body onbeforeunload="window.open('http://www.website.com/browserclosed.aspx','mywindow','width=1,height=1');">

服务器端脚本(browserclosed.aspx):


// page_load

int userId = Convert.ToInt32(request.session("userId"));
ReportBrowserClosed(userId);
// Do what you want in ReportBrowserclosed() method

0
第一件事情是你挂钩卸载事件,然后异步地回传浏览器已经离开你的网站(关闭窗口)。然而,HTTP 被用来构建无状态网站的方式使得这种方法不可行。你没有可靠的方法来追踪用户的连通性。
考虑一下如何处理多个会话?如果我在许多选项卡或窗口中打开了同一个站点并关闭了所有但一个,你如何告诉我仍然连接着?而且为了好玩,假设我的浏览器在其中崩溃了。
事实是,我可以设计出某种解决你问题的东西。但是,它永远不会可靠,因为 HTTP 没有内置的连通性控制机制。
我必须用一个跟进问题来回答这个问题。你为什么需要知道浏览器窗口何时关闭?
如果你需要进行一些资源清理,那么有两个由 ASP.NET 提供的服务器端事件可以更可靠地使用,它们是 Session_End 或 Application_End。

我不能代表OP回答,但这样做的一个常见原因是在用户放弃并关闭浏览器时停止长时间运行的操作(查询、报告生成等)。 - Gabe

0
这很明显的问题是为什么需要这个?你想要保存注销时间或关闭时间吗?那最好在会话超时时捕获。如果你想要重定向到其他页面,那最好在javascript的页面卸载事件中捕获。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接