如何在 c# 中关闭任何浏览器时从 XMPP 注销?

Posted

技术标签:

【中文标题】如何在 c# 中关闭任何浏览器时从 XMPP 注销?【英文标题】:How to logout from XMPP while closing any browser in c#? 【发布时间】:2017-12-01 04:33:17 【问题描述】:

当用户不在我的网站时,我想从 XMPP 注销或关闭我的连接。

我的问题是:我必须为此编写一些 jquery 事件还是进行 ajax 调用?

我在注销按钮点击事件中编写了这段代码。

XmppClient client = (XmppClient)Session["XMPP"];
if (client != null)

  client.Close();
  client.Dispose();

我不知道Global.asax 文件中是否有可用的事件。

或者请提供另一种方法。

【问题讨论】:

【参考方案1】:

在此处查看答案:javascript register window/tab closing event before window/tab close。

使用window.onbeforeunload (MDN article) 事件,您可以分配一个事件侦听器来触发可以完成您的XmppClient 的AJAX 调用:

window.onbeforeunload = function (event) 
    $.ajax('/api/route/specifically/to/finalize/xmpp')
;

当然,请务必检查 browser compatibility (MDN) 是否是您需要的。例如,Edge 不支持此事件。当涉及到那个特定的事件处理程序时,IE 显然是不确定的。您还可以参考替代"beforeunload" event,即apparently more widely supported。它看起来像这样:

window.addEventListener("beforeunload", function (event) 
    $.ajax('/api/route/specifically/to/finalize/xmpp')
);

另外请注意,如果浏览器崩溃,或者某些其他意外事件导致窗口关闭,而浏览器可能无法在窗口关闭之前触发该事件,这将不起作用。

您还可以考虑Global.aspx 中的Session_End 事件:On-Session-expire-event? 和MSDN article:

public void Session_OnEnd()

    Application.Lock();
    Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
    Application.UnLock();

这将在“调用 Abandon 方法或会话过期时”运行(根据 MSDN)。

【讨论】:

以上是关于如何在 c# 中关闭任何浏览器时从 XMPP 注销?的主要内容,如果未能解决你的问题,请参考以下文章

在 Master 上点击新项目时从 Detail viewController 中关闭模式

我如何只能在任何现代浏览器(如 chrome、firefox、safari、opera、IE 以及任何版本的通用 javascript [重复])中关闭当前选项卡

当应用程序在 iOS 中关闭且应用程序未在后台运行时从推送通知中获取数据

即使用户在android studio中关闭应用程序,如何保持登录状态

如何在 C# 中关闭这个循环二维数组?

如何在 Apollo 中关闭 GraphQL 订阅的套接字连接