Перехватить закрытие вкладки или браузера - PullRequest
0 голосов
/ 29 января 2020

Я должен перехватить закрытие браузера или вкладки, чтобы очистить сеанс моего приложения, сохраненного в Redis. Программа сделана в ASP. net MVC с элементами управления dev express.

Я использовал функцию $ (window) .bind ('beforeunload', function (), но я не могу различить guish между изменением страницы, возвратом браузера и событием закрытия.

Можете ли вы дать мне предложение? Спасибо!

1 Ответ

0 голосов
/ 29 января 2020

В 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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...