Как обрабатывать конец сеанса в global.asax?
Я работаю в приложении чата, я использовал HashTable для хранения User и Operator в качестве ключа и объекта classа ChatRoom в качестве значения HashTable. Основная проблема заключается в том, что когда пользователь или оператор закрывают браузер или отключаются без выхода из системы, он автоматически выходит из системы в конце сеанса.
Пожалуйста, помогите мне в этом и как использовать Global.asax в этом вопросе.
- Почему безопаснее использовать sizeof (* указатель) в malloc
- Процесс не может получить доступ к файлу, поскольку он используется другим процессом
- Как повторить символ с использованием printf?
- Как сгладить дерево через LINQ?
- Руководство по присвоению имен в поле C #?
- Установить атрибут DllImport динамически
- Заполнение строк в C
- LINQ Ring: Any () vs Содержит () для огромных коллекций
- Повысить уровень шкипера
- fork () больше, чем ожидалось?
- Ошибка связи C ++ после обновления до Mac OS X 10.9 / Xcode 5.0.1
- Как рассчитать ширину текстового блока WPF для его известного размера шрифта и символов?
- x86 Инструкция MUL от VS 2008/2010
Вы можете использовать событие окончания сеанса 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 для этого.