簡體   English   中英

攔截標簽頁或瀏覽器的關閉

[英]Intercept the closing of the tab or browser

我應該攔截瀏覽器或選項卡的關閉,以清理我保存在 redis 上的應用程序的會話該程序是在 ASP.net MVC 中使用 devexpress 控件制作的。

我使用了函數 $ (window) .bind ('beforeunload', function () 但我無法區分頁面更改、瀏覽器返回和關閉事件。

你能給我一個建議嗎? 謝謝!

JavaScript 無法確定頁面更改、用戶單擊后退按鈕(本質上與頁面更改相同)或用戶單擊關閉按鈕之間的區別。 他們都在“卸載”頁面。 瀏覽器不會發送附加信息來告訴您發生了什么導致頁面被卸載。 並且,依靠這個卸載事件來清除會話並不是一個好習慣。 其他事情可能會關閉瀏覽器而不會完全觸發該事件。 這是人們在 JavaScript 中遇到頁面卸載事件的常見問題。 通常,您不應依賴它來管理服務器端任務。

假設您使用的是 ASP.NET,會話將根據 Session.Timeout 值自動超時。 通常這是 30 分鍾,但可以根據設置進行更改:

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

進一步閱讀: ASP.NET MVC 中何時調用 Session_End()?

上面的代碼示例將放在您的 global.aspx.cs 文件中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM