Как обрабатывать конец сеанса в global.asax?
Я работаю в приложении чата, я использовал HashTable для того, чтобы содержать User и Operator в качестве ключа и объекта класса ChatRoom как значение HashTable. Основная проблема заключается в том, что когда пользователь или оператор закрывают браузер или отключаются без выхода из системы, он автоматически выходит из системы в конце сеанса.
Пожалуйста, помогите мне в этом и как использовать Global.asax в этом вопросе.
Ответы
Ответ 1
Вы можете использовать событие окончания сеанса global.asax для удаления неожиданно отключенного пользователя:
void Session_End(Object sender, EventArgs E) {
// Clean up session resources
}
но будьте осторожны, сеанс не заканчивается, когда пользователь закрывает свой браузер или потерял соединение. Он заканчивается с достижением таймаута сеанса.
Ответ 2
Добавьте файл Global.asax на свой веб-сайт, а в событии Session_End вы удалите пользователя из своей HashTable.
protected void Session_End(Object sender, EventArgs e)
{
// Remove user from HashTable
}
Ответ 3
Событие Session_End не срабатывает, когда браузер закрыт, он запускается, когда сервер не получил запрос от пользователя в определенный промежуток времени (по умолчанию 20 минут). Это означает, что если вы используете Session_End для удаления пользователей, они останутся в чате в течение 20 минут после закрытия браузера.
Я предлагаю вам сохранить время последнего запроса в объекте пользователя. Таким образом, вы можете определить, насколько активен пользователь, и насколько вероятно, что пользователь покинул чат. Вы можете, например, показать любого пользователя, который ничего не сделал в течение двух минут, как неактивный.
Вы также можете позволить чат-приложениям опроса сервера периодически (если вы этого не сделаете). Это обновит последнее время запроса в объекте и сохранит его до тех пор, пока открыто окно чата.
Вы можете использовать событие onunload в браузере, чтобы отправить запрос на выход на сервер, когда пользователь покидает страницу. Это, конечно, работает только в том случае, если у пользователя все еще есть сетевое подключение. Событие onunload также запускается при перезагрузке страницы, поэтому вам нужно будет отслеживать, почему событие запускается для его использования.
Ответ 4
Вы можете использовать JavaScript, который всегда работает на клиенте и посылает сигнал на сервер, например "Я здесь". Если следующий сигнал не поступает, вы можете вызвать Leave();
. Я использовал AJAX для этого.