Запуск серверной функции при закрытии браузера - PullRequest
7 голосов
/ 10 февраля 2009

Справочная информация: я создаю очень простую страницу ASP.NET, похожую на чат, с кодом C # Behind. Текущие пользователи / сообщения чата отображаются в элементах управления, расположенных на панели обновления AJAX, и с помощью таймера - они извлекают информацию из БД каждые несколько секунд.

Я пытаюсь найти простой способ справиться с установкой статуса пользователя на «Автономно», когда они выходят из браузера, вместо нажатия кнопки «Выйти». Статус "Offline" в настоящее время составляет всего 1 символ (y / n) для IsOnline.

До сих пор я изучал window.onbeforeunload с Javascript, устанавливая скрытую переменную формы с помощью функции для этого события -> Конечно, проблема в том, что мне все равно придется проверить эту скрытую переменную формы в моем Code-Behind где-нибудь для выполнения окончательного запроса к БД на стороне сервера, эффективно переводя пользователя в автономный режим.

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

Спасибо

Ответы [ 3 ]

15 голосов
/ 10 февраля 2009

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

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

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

2 голосов
/ 10 февраля 2009

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

2 голосов
/ 10 февраля 2009

Javascript не может быть надежным, потому что я могу закрыть свой браузер, закрыв его.

Более надежным способом может быть периодическая отправка сообщений «привет, я все еще жив» из браузера на сервер и изменение состояния сервера, когда он прекращает получать эти сообщения.

...