Вы не можете рассчитывать на получение события для пользователя, выходящего из системы, если он просто закрывает свой браузер или исчезает из Интернета.
В этом случае вам понадобится какой-то тайм-аут сеанса и запишите выход из системы, когда ваше приложение обнаружит, что их сеанс слишком стар.
Если это реальное требование, то я бы сказал, что вам нужна работа "cron", отслеживающая сеансы в течение времени ожидания. По истечении времени ожидания сеанса, если он вошел в систему, он записывает событие «выхода из системы» для этого пользователя.
Обратите внимание, что вы не можете использовать (например) событие ASPNET Session_End, потому что оно также не будет вызываться надежно (например, при перезапуске процесса сервера).
Другим вариантом является добавление времени выхода из системы в следующий раз, когда пользователь входит в систему - при входе в систему вы проверяете старые сеансы и предполагаете, что все, что не было закрыто, длились фиксированное количество времени с момента последнего посещения страницы.
Это действительно все, что вы можете сделать.