Получение данных сеанса зарегистрированных пользователей в Java - PullRequest
0 голосов
/ 15 июля 2011

Я работаю с сервлетами.Когда мой пользователь входит в систему, мое приложение устанавливает его userId и deviceId в переменной сеанса.

Некоторым другим компонентам моего приложения теперь требуется список онлайн-пользователей и их userId / deviceId.Обратите внимание, что у пользователя могут быть одновременные входы в систему с 2 устройствами, поэтому у нас есть 2 идентификатора устройства для одного и того же идентификатора пользователя.

Как мне подходить к этой ситуации?Я не хочу использовать базу данных для отслеживания функций входа / выхода

Ответы [ 3 ]

4 голосов
/ 15 июля 2011

Сохраните эту информацию также в атрибуте HttpServletContext.Этот контекст является глобальным для каждого сервлета и может быть доступен для всех сеансов.

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

1 голос
/ 15 июля 2011

В дополнение к ответу Алекса. Атрибут заголовка, который вы ищете, это user-agent. Ниже приведен фрагмент кода доступа к типу браузера из запроса.

((javax.servlet.http.HttpServletRequest) pageContext.getRequest ()). GetHeader ( "пользователь-агент")

0 голосов
/ 15 июля 2011

В дополнение к ответам Алекса и Сукена, если у пользователя есть один сеанс, вы можете сохранить идентификаторы устройства на карте:

String userAgent = (see Suken's response)
String deviceId = request.getParameter("REQUEST_PARAMETER_DEVICE_ID");
Map<String, String> devices = request.getSession().getAttribute("SESSION_ATTRIBUTE_DEVICES");
if (devices == null) {
    devices = new HashMap<String, String>();
    request.getSession().setAttribute("SESSION_ATTRIBUTE_DEVICES", devices);
}
devices.put(userAgent, deviceId);

Это гарантирует, что несколько устройств останутся видимыми и не будут перезаписаны.Вам все еще нужно выставлять их, как объяснил Алекс, если вы хотите получить к ним доступ на уровне приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...