Есть ли способ с помощью ASP.NET всегда запускать некоторый серверный код, когда пользователь покидает страницу? - PullRequest
2 голосов
/ 13 января 2011

Мне было интересно, есть ли способ всегда запускать какой-нибудь серверный код, когда пользователь покидает страницу в ASP.NET. Событие Unload страницы не годится, потому что оно не вызывается, если кто-то нажимает на ссылку. В идеале мне бы хотелось, чтобы код запускался, даже если пользователь закрывает браузер.

Я подозреваю, что то, что я спрашиваю, невозможно, но спрашивать не больно

Ответы [ 4 ]

2 голосов
/ 13 января 2011

Проблема в том, что HTTP - это протокол без сохранения состояния, поэтому, когда страница закончится, вы не узнаете, находится ли пользователь на странице или нет.

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

Вот диаграмма, объясняющая традиционный поток HTTP-сообщений.

alt text

2 голосов
/ 13 января 2011

Я не совсем уверен, если вы можете сделать это, но я имею в виду обходной путь. В DOM есть событие onbeforeunload. он получает звонки каждый раз, когда пользователь покидает страницу. вы можете попытаться отправить запрос ajax на сервер из этой функции.

1 голос
/ 13 января 2011

Самое близкое, на что вы можете прийти, не создавая слишком грязного решения, - это включить сеансы ASP. Это создаст сеанс на сервере для каждого посетителя, который будет идентифицирован cookie-файлом.

После определенного периода бездействия посетителя сеанс будет закрыт, а событие SessionEnd будет инициировано. Это можно подключить в файле Global.asax.

Однако я не буду рекомендовать это, потому что HTTP это pr. Определение протокола без сессий, и использование сеансов на основе сервера нарушает этот факт и часто проблематично. Многие решения, использующие серверные сеансы, сталкиваются с проблемами, когда пользователь использует кнопку возврата в браузере и повторно отправляет форму. Поскольку содержимое отправленной формы больше не соответствует данным, существующим в сеансе сервера.

Кроме того, включение серверных сеансов серьезно ухудшает масштабируемость приложения.

0 голосов
/ 13 января 2011

Не то, что я знаю.Для этого вам нужно будет использовать javascript и вызвать веб-сервис на стороне сервера.

...