В моем веб-приложении, когда пользователь входит в систему, я добавляю его идентификатор к вектору допустимых идентификаторов в сервлете, когда он выходит из системы, я удаляю его идентификатор из вектора, поэтому я могу видеть, сколько нынешних пользователей активен, если пользователь забыл выйти из системы, у моего сервлета, сгенерированного 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 ]
...
Как узнать, из прослушивателя сеанса, который закончился пользовательский сеанс и, следовательно, удалить его из моего списка?
Я надеялся, что когда сессия закончится, будет вызван метод HttpServlet destroy()
, и я могу удалить идентификатор пользователя там, но он никогда не вызывается, когда пользователь закрывает свой браузер, почему? И есть ли какой-либо другой метод в HttpServlet, который вызывается при закрытии сеанса?