Как обрабатывать конец сеанса в global.asax?

Я работаю в приложении чата, я использовал HashTable для хранения User и Operator в качестве ключа и объекта classа ChatRoom в качестве значения HashTable. Основная проблема заключается в том, что когда пользователь или оператор закрывают браузер или отключаются без выхода из системы, он автоматически выходит из системы в конце сеанса.

Пожалуйста, помогите мне в этом и как использовать Global.asax в этом вопросе.

Вы можете использовать событие окончания сеанса global.asax для удаления неожиданно отключенного пользователя:

void Session_End(Object sender, EventArgs E) { // Clean up session resources } 

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

Добавьте файл Global.asax на свой веб-сайт, а в мероприятии Session_End вы удалите пользователя из своего HashTable.

 protected void Session_End(Object sender, EventArgs e) { // Remove user from HashTable } 

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

Я предлагаю вам сохранить время последнего запроса в объекте пользователя. Таким образом, вы можете определить, насколько активен пользователь, и насколько вероятно, что пользователь покинул чат. Вы можете, например, показать любого пользователя, который ничего не сделал в течение двух минут, как неактивный.

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

Вы можете использовать событие onunload в браузере для отправки запроса на выход на сервер, когда пользователь покидает страницу. Это, конечно, работает только в том случае, если у пользователя все еще есть сетевое подключение. Событие onunload также запускается при перезагрузке страницы, поэтому вам нужно будет отслеживать, почему это событие инициировано для его использования.

Вы можете использовать JavaScript, который всегда работает на клиенте и отправляет сигнал на сервер, например «Я здесь». Если следующий сигнал не поступает, вы можете вызвать Leave(); , Я использовал AJAX для этого.

  • отображать Песочные часы, когда приложение занято
  • stream с несколькими параметрами
  • Многозначный словарь?
  • Являются ли lambda-выражения в закрытии C #?
  • Проверка того, установлен ли бит или нет
  • BOOST ASIO - Как написать консольный сервер
  • Список readonly с частным набором
  • Обнаруживать, работает ли программа с полными правами администратора
  • Как удалить «знать» размер массива операндов?
  • Почему явная реализация интерфейса не может быть общедоступной?
  • Случайное число между двумя двойными номерами
  • Давайте будем гением компьютера.