request.getSession没有返回相同的会话

时间:2011-05-20 16:27:53

标签: java session servlets spring-mvc

我们的产品是在Spring 3.0 MVC中开发的。

我们在控制器中使用了如下会话。

  @Controller
  public class LoginController{
     HttpSession session;

     @RequestMapping(value="/index.htm",method = RequestMethod.POST)
     public ModelAndView viewIndex(HttpServletRequest request){
     session=request.getSession(false);
     System.out.println(request.getSession(false));
     System.out.println(session);   
     }
  }

在Firefox中,我可以看到request.getSession(false)session都打印了相同的值。

在IE中,我可以看到request.getSession(false)打印一个值,session打印为null

可能是什么原因?

注意:我没有使用任何过滤器进行会话

1 个答案:

答案 0 :(得分:10)

您应该从不将请求或会话特定变量分配为类的字段,在整个应用程序的生命周期中只有一个实例。然后,所有网页访问者将共享相同的变量。访问者X然后将与访问者Y共享会话。这是一个巨大的数据完整性泄漏。

至于抓取会话,如果你需要会话,只需直接使用request.getSession()而不使用布尔值。 将其分配给某个字段以便“以后重复使用”。

@RequestMapping(value="/index.htm",method = RequestMethod.POST)
public ModelAndView viewIndex(HttpServletRequest request){
    HttpSession session = request.getSession();
    // ... Get/set attributes?
}

有关servlet如何在底层工作的更多背景信息(Spring MVC是一个构建在基本Servlet API之上的框架),您可能会发现这篇文章很有用:How do servlets work? Instantiation, sessions, shared variables and multithreading