request.getSession 不返回相同的会话

发布于 2024-11-09 06:32:52 字数 681 浏览 0 评论 0原文

我们的产品是用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

可能是什么原因?

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

Our product is developed in Spring 3.0 MVC.

We have used, session as follows in controllers.

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

Here in Firefox, i can see both request.getSession(false) and session are printed with same value.

While in IE, i can see request.getSession(false) prints a value and session is printed as null.

What could be the reason?

Note: I am not using any filter for session

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆梦 2024-11-16 06:32:52

您不应该永远将请求或会话特定的变量分配为在整个应用程序的生命周期中只有一个实例的类的字段。所有网页访问者将共享相同的变量。然后,访问者 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 之上的框架),您可能会发现这篇文章很有用:servlet 是如何工作的?实例化、会话、共享变量和多线程

You should never assign request or session specific variables as a field of a class of which there's only one instance throughout the entire application's lifetime. All the webpage visitors would then share the same variable. Visitor X would then share the session with visitor Y. This is a huge data integrity leak.

As to grabbing the session, if you need the session, just use request.getSession() straight without the boolean. Do not assign it to some field for "later reuse".

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

For more background information about how servlets works under the covers (Spring MVC is a framework which is built on top of the basic Servlet API), you may find this post useful: How do servlets work? Instantiation, sessions, shared variables and multithreading.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文