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

时间:2011-07-15 06:35:10

标签: java session

我正在使用servlet。当我的用户登录时,我的应用程序将他的userId和deviceId设置为会话变量。

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

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

3 个答案:

答案 0 :(得分:4)

将此信息也存储在HttpServletContext的属性中。这个上下文是每个servlet的全局,并且可以被所有会话所接受。

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

答案 1 :(得分:1)

除了亚历克斯的回应。您要查找的标头属性是user-agent。以下是从请求中访问浏览器类型的代码段。

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

答案 2 :(得分:0)

除了Alex和Suken的回复之外,假设用户只有一个会话,您可以将deviceId存储在Map中:

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);

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