Как обнаружить браузер близко на стороне сервера в asp.net? - PullRequest
7 голосов
/ 02 декабря 2010

Я хотел знать, когда браузер закрыт на стороне сервера в asp.net 2.0. Как обнаружить в коде позади?

Ответы [ 4 ]

9 голосов
/ 02 декабря 2010

Краткий ответ: вы не можете сделать это напрямую, так как http не имеет состояния. Возможно, вы можете использовать пулы AJAX для определения ритма, определение времени ожидания сеанса и другие приемы.

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

4 голосов
/ 13 декабря 2010

скрипт на стороне клиента:

< body onbeforeunload="window.open('http://www.website.com/browserclosed.aspx','mywindow','width=1,height=1');">

скрипт на стороне сервера (browserclosed.aspx):

// page_load

int userId = Convert.ToInt32(request.session("userId"));
ReportBrowserClosed(userId);
// Do what you want in ReportBrowserclosed() method
0 голосов
/ 12 декабря 2010

Совершенно очевидный вопрос: зачем вам это? Вы хотите сохранить время выхода из системы или время закрытия? Тогда лучше поймать время ожидания сеанса. Если вы хотите перенаправить какую-то другую страницу, тогда ее лучше отлавливать в событии выгрузки страницы из javascript.

0 голосов
/ 10 декабря 2010

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

Только подумайте, как бы вы справились с несколькими сессиями? Если у меня один и тот же сайт открыт во многих и нескольких вкладках или окнах и закрывает все, кроме одного, как вы говорите, что я все еще на связи? И в шутку скажем, что мой браузер завис где-то там между ними.

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

Я должен ответить на этот вопрос с помощью дополнительного вопроса. Зачем вам нужно знать, когда окно браузера закрывается?

Если вам нужно выполнить очистку какого-либо ресурса, есть два серверных события, облегченные ASP.NET, которые вы можете использовать более надежно. И это Session_End или Application_End.

...