Есть ли способ использования ASP.NET для всегда запуска кода на стороне сервера, когда пользователь покидает страницу?

StackOverflow https://stackoverflow.com/questions/4679573

Вопрос

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

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

Это было полезно?

Решение

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

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

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

alt text

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top