В моем веб-приложении, когда пользователь входит в систему, я добавляю его Id к вектору действительных идентификаторов в сервлете, когда он выходит из системы, я удаляю его Id из вектора, чтобы видеть, сколько текущих пользователей активный, если пользователь забывает выйти, мой сгенерированный сервлетом html имеет:
<meta http-equiv="Refresh" content="30; url=My_Servlet?User_Action=logout&User_Id=1111">
в теге для автоматического выхода из него.
Но я заметил, что многие пользователи всегда там, никогда не выходили из системы. Я выяснил, почему, закрыв свои браузеры, они никогда не выходили вручную или автоматически, поэтому их идентификаторы никогда не будут удалены из вектора действительных идентификаторов пользователей.
Итак, мой вопрос: как мне обнаружить, что пользователи закрывают свои браузеры, чтобы мой сервлет мог удалить их идентификаторы из вектора?
Я вижу свет в конце туннеля, но все еще есть проблема, моя программа имеет что-то вроде этого:
Список активных пользователей:
User_1 : Machine_1 [ IP_1 address ]
User_2 : Machine_2 [ IP_2 address ]
User_3 : Machine_3 [ IP_3 address ]
...
Как узнать от слушателя сеанса, какой сеанс пользователя завершился, и, следовательно, удалить его из моего списка?
Я надеялся, что когда сеанс закончится, будет вызван метод destroy()
HttpServlet, и я могу удалить там идентификатор пользователя, но он никогда не вызывается, когда пользователь закрывает свой браузер, почему? И есть ли другой метод в HttpServlet, который вызывается при закрытии сессии?