Я не совсем уверен, что это ответ, но, возможно, он вам поможет.
Сначала вы можете получить событие, когда пользовательский сеанс заканчивается. Таким образом, в этом случае вы можете завершить push-уведомление.
Чтобы добиться этого, просто добавьте следующую строку кода в ваш Global.asax
protected void Session_End(object sender, EventArgs e)
{
//End push notification
}
Для того, чтобы вы заметили, что пользователь закрывает браузер или нажимает, вам нужен некоторый JavaScript. В моем примере я делаю это с помощью HTTP-запроса, но вы также можете сделать это с некоторыми сокетами или всем остальным.
function SendPostRequest(eMail) {
try {
$.post(
"/apiacc/sessionend",
{ Value: eMail },
function (data, status, xhr) {
}
);
} catch (error) {
//Error catching
}
}
function SetInterval(eMail) {
SendPostRequest(eMail);
window.setInterval(() => { SendPostRequest(eMail); }, 300000);
}
И я просто запускаю функцию, когда загружается сайт. Таким образом, JavaScript отправляет каждые 5 минут запрос. Который я сохраняю в базе данных (я использую, например, адрес электронной почты для авторизации). При запуске приложения вы создаете фоновую задачу. Который будет проверять каждые 5 минут, если некоторые из сеанса, не получают звонок в течение последних 5 минут. Таким образом, вы можете завершить сеанс, и будет вызвано событие в вашем global.asax.
Надеюсь, это поможет?