Первое, что приходит на ум, это то, что вы перехватываете событие unload и просто асинхронно сообщаете, что браузер ушел с вашего сайта (закрыв окно). Однако то, как HTTP используется для создания сайтов без сохранения состояния, делает это невозможным. У вас просто нет надежного способа отслеживания подключения пользователей.
Только подумайте, как бы вы справились с несколькими сессиями? Если у меня один и тот же сайт открыт во многих и нескольких вкладках или окнах и закрывает все, кроме одного, как вы говорите, что я все еще на связи? И в шутку скажем, что мой браузер завис где-то там между ними.
Дело в том, что я мог бы спроектировать что-то, что решило бы вашу проблему. Тем не менее, он никогда не будет надежным, потому что HTTP не имеет встроенного механизма контроля подключения.
Я должен ответить на этот вопрос с помощью дополнительного вопроса. Зачем вам нужно знать, когда окно браузера закрывается?
Если вам нужно выполнить очистку какого-либо ресурса, есть два серверных события, облегченные ASP.NET, которые вы можете использовать более надежно. И это Session_End
или Application_End
.