2009-12-01 171 views
7

我想在注销时做一些功能,如果用户直接关闭了浏览器,然后同样的功能要做,我们不能在页面卸载,因为有超过100页我的网站,因为这将在重定向工作从每一页在Asp.net上检测浏览器关闭

谢谢

+2

它不能完成。 – 2009-12-04 17:34:44

+0

检测浏览器关闭与asp.net无关。这是一个客户端的事情。 – 2011-06-30 06:07:21

回答

15
<script type="text/javascript"> 
var closing = true; 
$(function() { 
    $("a,input[type=submit]").click(function() { closing = false; }); 
    $(window).unload(function() { 
     if (closing) { 
      jQuery.ajax({ url: "http://localhost:49591/Account/LogOff", async: false }); 
     } 
    }); 
}); 
</script> 

调用logout.aspx当窗口关闭使用JavaScript + jQuery的。在logout.aspx页面加载事件中做任何你想做的事情。

上面的代码片段将不得不添加到您的母版页的html中。

+0

+1,听起来很合理。浏览器关闭必须在客户端(JavaScript)完成,因为它不会被发送回服务器,因此服务器不会收到通知。 – Juri 2009-12-01 07:11:50

+0

但OP说他们不想使用页面卸载,对吧?一个问题是,这个事件不仅会在用户关闭浏览器时触发(尽管只在* some *浏览器中),还会在用户浏览到下一页时触发。 – RickNZ 2009-12-01 07:20:06

+0

-1这不起作用按预期 – 2009-12-01 14:11:37

7

您可以有一个“注销”情况的按钮。

不幸的是,如果用户关闭浏览器,没有可靠的通知方式。除了客户端的页面卸载之外,你说你不想要的,关于唯一的其他选择是基于周期性的基于Ajax的轮询;都丑陋和臭名昭着不可靠。

通常,服务器端超时是一种更好的方法。

+0

可以请你提供一些代码示例 – Prorammer81 2009-12-02 11:13:23

1

这不是Global.asax中Session_OnEnd的用途吗?

浏览器关闭时不会触发此事件。

+2

Session_OnEnd并不总是可靠的,只会触发InProc会话模式 – JonoW 2010-01-21 15:45:16

+0

好的,感谢(痛苦的)课程;-) – 2010-01-22 15:34:43