Сохранение активности пользователя в базе данных в JSP / Java

#jsp #login #admin #logout

#jsp #войти #администратор #Выход

Вопрос:

В настоящее время я работаю над проектом в JSP. Как мне сохранить время входа пользователя в систему и выхода из системы и текущий номер. пользователей онлайн в базе данных? Также я хочу проверить это как администратор, а не как пользователь?

Ответ №1:

Как мне сохранить время входа пользователя в систему и выхода из системы и текущий номер. пользователей онлайн в базе данных?

Вот простой пример HttpSessionListener для отслеживания общего количества активных сеансов в веб-приложении. Если вы хотите продолжать отслеживать поведение вашего сеанса при создании и удалении, рассмотрите этот прослушиватель.

Пример кода:

 import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
 
public class SessionCounterListener implements HttpSessionListener {
 
  private static int totalActiveSessions;
 
  public static int getTotalActiveSession(){
    return totalActiveSessions;
  }
 
  @Override
  public void sessionCreated(HttpSessionEvent arg0) {
    totalActiveSessions  ;
    System.out.println("sessionCreated - add one session into counter");
    // database call to log the log in event of the user with current time
  }
 
  @Override
  public void sessionDestroyed(HttpSessionEvent arg0) {
    totalActiveSessions--;
    System.out.println("sessionDestroyed - deduct one session from counter");
    // database call to log the log out event of the user with current time
  } 
}
 

web.xml

 <web-app ...>
    <listener>
        <listener-class>com.x.y.z.SessionCounterListener</listener-class>
    </listener>
</web-app>
 

Как это работает?

  • Если создается новый сеанс, например request.getSession(); , sessionCreated() будет выполнен прослушиватель.
  • Если сеанс будет уничтожен, например, тайм-аут сеанса или session.invalidate() прослушивателя sessionDestroyed() будет выполнен.

Пример кода:

 HttpSession session = request.getSession(); //sessionCreated() is executed
...
session.invalidate();  //sessionDestroyed() is executed
 

Для получения дополнительной информации посетите mkyong.com откуда взят этот пример.

Комментарии:

1. Итак, чтобы я мог это увидеть, я создаю отдельную таблицу в базе данных или просматриваю ее в той же базе данных с информацией для входа, такой как имя пользователя и пароль?

2. теперь у вас есть полный контроль, где вы можете фиксировать события входа пользователя в систему и выхода из системы. Просто зарегистрируйте его в базе данных вместе с именем пользователя или любым уникальным идентификатором вместе с текущим временем.

3. О, хорошо, спасибо, я бы полностью понял это только после того, как я это осуществлю. Итак, должен ли я написать приведенный выше код в bean и вызвать bea во время входа в систему?

4. Извини, что я этого не понял. напишите боб, зачем это нужно? Это слушатель, а не обычный класс POJO. Этот класс вызывается контейнером автоматически. Вам не нужно вызывать его вручную. Вы должны сообщить контейнеру, что это мой слушатель, и вызывать его, когда такие действия происходят в моем приложении, и это делается путем определения его в web.xml , как показано в моем посте.

5. Хорошо, сделайте это в соответствии с вашим темпом и дизайном приложения. но не могли бы вы объяснить мне, что значит вызывать компонент во время входа в систему?

Ответ №2:

Вы должны создать таблицу like log_events(id, event_type, when) и хранить в ней события входа и выхода всякий раз, когда они происходят.

Комментарии:

1. Как мне сохранить его в качестве администратора, чтобы отслеживать пользователей?

2. Просто убедитесь, что вы показываете записи из этой таблицы администратору и никому другому. Что касается вставки записей, всякий раз, когда у вас есть успешный вход в систему или выход из системы, сохраните соответствующее событие в таблице.