3

我想为每个登录的用户存储他在 Spring 会话中的 id。我所做的是:

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
    HttpSession session = request.getSession(true);

    session.getServletContext().setAttribute("userId", userId); 

当我需要身份证时,我正在做

 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes()).getRequest();  
 HttpSession session = request.getSession();
 Long userId = (Long) session.getServletContext().getAttribute("userId");

第一个用户登录,获取会话ID就可以了。

第二个用户登录,会话ID被覆盖(我看到因为第一个用户的每个下一步操作,都会获取第二个用户的用户ID)

实现这一目标的正确方法是什么,显然我没有正确理解会话?

感谢所有的建议

4

3 回答 3

5

您将属性存储在 中,该属性在同一 webappServletContext的所有会话中共享。

您应该将属性存储在HttpSession自身中:

session.setAttribute("userId", userId);

然后检索它:

Long userId = (Long) session.getAttribute("userId");

于 2012-09-21T15:04:42.997 回答
1

你没有在HttpSession这里使用,你使用的是ServletContext,顾名思义,它是一个单例。

session.setAttribute("userId", userId);

Long userId = (Long) session.getAttribute("userId");
于 2012-09-21T15:04:50.180 回答
0

我更喜欢在 HttpSession 中保存 sessionBean 对象...您可以使用要保留在会话中的数据创建 bean

session.setAttribute("sessionData",sessionBean);

于 2013-12-12T21:07:57.853 回答