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

Ezh*_*hil 3 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);   
     }
  }
Run Code Online (Sandbox Code Playgroud)

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

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

可能是什么原因?

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

Bal*_*usC 10

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

至于抓住会话,如果你需要会话,只需使用request.getSession()没有布尔值的直接.千万不能把它分配给了一些领域"以后重用".

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

有关servlet如何工作的更多背景信息(Spring MVC是一个构建在基本Servlet API之上的框架),您可能会发现这篇文章很有用:servlet如何工作?实例化,会话,共享变量和多线程.