Есть ли способ узнать, что пользователь покидает страницу с asp.net? - PullRequest
3 голосов
/ 31 июля 2009

Мой вопрос немного сложнее. по крайней мере, я думаю. Может быть, нет, в любом случае. Я хочу знать, есть ли способ узнать, покидает ли пользователь страницу. В любом случае, если он нажмет «Предыдущая кнопка», закроет окно или нажмет на ссылку на моем сайте. Если моя память все еще хороша, я думаю, что это возможно с JavaScript.

Но в моем случае я хочу кое-что сделать (очистить объекты) в моем коде.

Ответы [ 5 ]

4 голосов
/ 31 июля 2009

Там действительно нет способа сделать это. Событие не запускается, когда браузер возвращается.

Вы можете сделать это с помощью Javascript, но в лучшем случае это сложно.

См. вопрос здесь .

Этот скрипт также будет работать. Было найдено здесь

<script>

window.onbeforeunload = function (evt) {
var message = ‘Are you sure you want to leave?’;
if (typeof evt == ‘undefined’) {
evt = window.event;
}
if (evt) {
evt.returnValue = message;
}
return message;
}

</script> 
3 голосов
/ 31 июля 2009

Если цель этого состоит в том, чтобы очистить объекты в вашем коде, достаточно ли этого, чтобы полагаться на время ожидания сеанса? Перед очисткой этих объектов будет 20 минутная задержка (или то, на что вы настроили тайм-аут сеанса).

Но это простой и надежный способ сделать это. В вашем файле Global.asax вы просто сделаете это:

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
  ' Clean up stuff
End Sub
3 голосов
/ 31 июля 2009

Вы можете использовать javascript, чтобы сообщить серверу, когда пользователь покидает страницу. Но когда сервер покидает сервер, веб-сервер моет руки на странице, а пользователь может держать страницу открытой в течение недели.

Если вы используете javascript на странице для отправки уведомления на сервер, когда страница выгружается, вы можете предпринять какие-то действия. Но вы не можете сказать, покидает ли он вашу страницу для другой вашей страницы, другого веб-сайта или закрывает браузер.

И последнее уведомление не всегда будет отправлено, поэтому вы не можете полностью на него полагаться.

Таким образом, использование уведомления javascript для очистки объектов (кешей или сессий) является ошибочной системой. Вы лучше работаете со стратегиями аннулирования кэша и сессии, которые не зависят от уведомления о загрузке.

1 голос
/ 31 июля 2009

Как уже упоминалось, вы можете сделать это ненадежно в JavaScript, но из формулировки вашего вопроса я предполагаю, что вы хотите сделать это в коде на стороне сервера («Кодовый код»).

Это невозможно, поскольку программный код выполняется на другом компьютере (веб-сервере) и не имеет представления о том, что происходит на компьютере пользователя, если браузер не отправляет запрос обратно на сервер (для чего требуется некоторый Javascript или другой клиентский код).

Если необходимо, используйте события тайм-аута сеанса для очистки любой информации о состоянии, которую вы храните за пределами срока действия запроса.

0 голосов
/ 31 июля 2009

Euuwww ... ну хорошо. Моя проблема в том, что я сохранил в переменной Session объекты (с кучей критериев поиска). Сохраняя его в переменной сеанса, если пользователь вернется к результатам моей страницы поиска, он выдаст тот же результат, что и в прошлый раз. Но после некоторого размышления (не в коде, а в моей голове и после просмотра вашего ответа: oP) я добавлю в свой объект логическое свойство, которое будет означать что-то вроде «IsDirty» или «HasBeenListed». И когда я загружу обратно, если он настроен как грязный, он будет перенаправлен обратно на другую страницу.

Спасибо Дэвиду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...