Очистка БД при тайм-ауте сеанса и выходе из системы - PullRequest
1 голос
/ 27 февраля 2011

Просто быстрый вопрос.При входе в систему я помещаю каждого пользователя в базу данных, потому что только один пользователь может войти в систему с тем же именем и паролем.Если этот пользователь уже находится в БД, я не впускаю его. Когда пользователь выходит из системы, я очищаю таблицу дБ и аннулирую сеанс в сервлете.Теперь, если пользователь забыл выйти, сеанс, очевидно, истечет, например, в.20 минут, поэтому в web.xml я создал это:

<listener>
    <listener-class>com.servlets.dbclean</listener-class>
</listener>

Этот класс dbclean затем реализует HttpSessionListener, а по методу sessionDestroyed я очищаю базу данных.Мой вопрос: достаточно ли, чтобы эта очистка БД происходила только здесь, потому что, когда пользователь выходит из системы вручную, сеанс будет признан недействительным, и будет вызван этот метод, или я должен очистить БД в сервлете /doLogout и полагаться на этоСлушатель, когда пользователь забыл выйти?Так это безопасный способ использовать только этот слушатель?

1 Ответ

2 голосов
/ 28 февраля 2011

Слушатель будет запущен, когда сеанс признан недействительным - либо по таймауту, либо по вызову invalidate()

Если вам не нужна поддержка кластеризации, вы можете просто сохранить зарегистрированного пользователя в Set внутри ServletContext (сделать это в sessionCreated(..), а затем удалить его из этого набора в sessionDestroyed(..) Нет необходимости обращаться к базе данных - она ​​может оставаться в памяти. (Используя репликацию сеансов, вы можете делать это и в кластере)

...