Посмотрите на метод Session_End () в global.asax. Файл global.asax уже должен быть подключен для вызова этого метода после завершения сеанса. Вы можете просто вставить свой код туда, куда захотите.
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' Fires when the session ends
End Sub
Конечно, вы должны заметить, что сессия полностью на стороне сервера. Это закончится только после X минут бездействия (по умолчанию 20 минут). Это не закончится, как только пользователь закроет окно. ASP.NET не знает, как пользователь закрывает окно или покидает вашу страницу.
И на самом деле сложно попытаться выполнить какое-либо немедленное действие на стороне сервера, когда это произойдет. Я имею в виду, что легко вызвать window.onbeforeunload в Javascript и вызвать окно подтверждения, прежде чем пользователь закроет окно. Но когда вы пытаетесь отправить пакет на сервер непосредственно перед тем, как окно действительно закроется, я думаю, вы обнаружите, что сделать все это удобным для пользователя становится сложной задачей. Вы можете написать некоторый Javascript, который отправляет сообщение на сервер, используя AJAX, который уведомляет сервер о том, что пользователь закрывает свой браузер, а затем использовать больше Javascript, чтобы закрыть браузер после того, как это сообщение было отправлено. Но тогда пользователь получит раздражающее сообщение (в большинстве браузеров) о том, что скрипт пытается закрыть окно. Это будет выглядеть очень любопытно для пользователя и может заставить его подумать дважды о возвращении.
Так что, если вы готовы смириться с задержкой, я бы просто полностью избежал всего этого беспорядка в Javascript и использовал бы чисто серверное решение с использованием Session_End (). В конце концов, если пользователь закроет окно или уйдет, ASP.NET будет со временем уведомлять, потому что время сеанса истечет.