获取java中已登录用户的会话数据

获取java中已登录用户的会话数据,java,session,Java,Session,我正在与servlet合作。当我的用户登录时,我的应用程序正在会话变量中设置他的userId和deviceId 我的应用程序的其他部分现在需要在线人员列表及其用户ID/deviceId。请注意,一个用户可能同时登录两个设备,因此我们有两个设备ID用于相同的用户ID 我应该如何处理这种情况?我不愿意使用数据库跟踪登录/注销功能也将此信息存储在HttpServletContext的属性中。此上下文是每个servlet的全局上下文,可由所有会话访问 你甚至可以做得更多。使用HttpSessionAtt

我正在与servlet合作。当我的用户登录时,我的应用程序正在会话变量中设置他的userId和deviceId

我的应用程序的其他部分现在需要在线人员列表及其用户ID/deviceId。请注意,一个用户可能同时登录两个设备,因此我们有两个设备ID用于相同的用户ID


我应该如何处理这种情况?我不愿意使用数据库跟踪登录/注销功能

也将此信息存储在HttpServletContext的属性中。此上下文是每个servlet的全局上下文,可由所有会话访问


你甚至可以做得更多。使用HttpSessionAttributeListener,您可以在每次添加属性时收到通知,因此如果您想创建某种类型的监视器应用程序,它可能会更具响应性。

将此信息也存储在HttpServletContext的属性中。此上下文是每个servlet的全局上下文,可由所有会话访问


你甚至可以做得更多。使用HttpSessionaDistributeListener,您可以在每次添加属性时收到通知,因此,如果您想创建某种类型的监视器应用程序,它可能会响应更快。

除了Alex的响应之外。您要查找的标题属性是用户代理。以下是从请求访问浏览器类型的代码段


((javax.servlet.http.HttpServletRequest)pageContext.getRequest()).getHeader(“用户代理”)

除了Alex的响应之外。您要查找的标题属性是用户代理。以下是从请求访问浏览器类型的代码段


((javax.servlet.http.HttpServletRequest)pageContext.getRequest()).getHeader(“用户代理”)

除了Alex和Suken的响应之外,假设用户有一个会话,您可以将设备ID存储在映射中:

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);
stringuseragent=(参见Suken的回复)
String deviceId=request.getParameter(“request\u PARAMETER\u DEVICE\u ID”);
映射设备=request.getSession().getAttribute(“会话属性设备”);
如果(设备==null){
devices=newhashmap();
request.getSession().setAttribute(“会话属性设备”,设备);
}
devices.put(userAgent,deviceId);

这样可以确保多个设备保持可见且不会被覆盖。如果您想在应用程序级别访问它们,仍然需要像Alex解释的那样公开它们。

除了Alex和Suken的响应之外,假设用户只有一个会话,您可以将设备ID存储在映射中:

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);
stringuseragent=(参见Suken的回复)
String deviceId=request.getParameter(“request\u PARAMETER\u DEVICE\u ID”);
映射设备=request.getSession().getAttribute(“会话属性设备”);
如果(设备==null){
devices=newhashmap();
request.getSession().setAttribute(“会话属性设备”,设备);
}
devices.put(userAgent,deviceId);
这样可以确保多个设备保持可见且不会被覆盖。如果您想在应用程序级别访问它们,仍然需要像Alex解释的那样公开它们