В JavaScript нет способа определить разницу между изменением страницы, пользователем, нажимающим кнопку «назад» (что в сущности совпадает с изменением страницы), или пользователем, нажимающим кнопку «Закрыть». Они все «разгружают» страницу. Браузер не отправляет дополнительную информацию, чтобы сообщить вам, что случилось с причиной выгрузки страницы. И полагаться на это событие unload для очистки сеанса не является хорошей практикой. Другие вещи могут закрыть браузер, не вызывая этого события чисто. Это общая проблема, с которой люди сталкиваются при событии выгрузки страницы в JavaScript. Как правило, вы не должны полагаться на него при управлении задачами на стороне сервера.
При условии, что вы используете ASP. NET, время сеансов автоматически истечет на основе значения Session.Timeout. Обычно это 30 минут, но его можно изменить в зависимости от настроек:
Тайм-аут сеанса в ASP. NET
Если вы хотите t ie событие на стороне сервера с кодом C# для события Session-End, вы можете сделать это, поместив обработчик события в ваш файл global.aspx. Вам не нужно полагаться на JavaScript. Вам нужно подождать, пока сессия истечет. Например:
https://docs.microsoft.com/en-us/dotnet/api/system.web.sessionstate.sessionstatemodule.end?view=netframework-4.8
Дополнительное чтение: Когда вызывается Session_End () в ASP. NET MVC?
Пример кода сверху, который будет go в вашем файле global.aspx.cs:
protected void Session_End(object sender, EventArgs e)
{
//do whatever you need to here
System.Diagnostics.Debug.WriteLine("Session_End");
}