2009-12-01 218 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