request.getSession 不返回相同的会话
我们的产品是用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不应该永远将请求或会话特定的变量分配为在整个应用程序的生命周期中只有一个实例的类的字段。所有网页访问者将共享相同的变量。然后,访问者 X 会与访问者 Y 共享会话。这是一个巨大的数据完整性泄漏。
至于获取会话,如果您需要会话,只需直接使用
request.getSession()
,无需布尔值。不要将其分配给某个字段以供“稍后重用”。有关 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".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.