我的代码,
HttpSession session = request.getSession(false);
// Details.l.info(" 1>>>>session ID is : " + session.getId());
Details.l.info("["+this.getClass()+"]"+"request from "+request.getRemoteHost());
if(session==null){
session = request.getSession(true);
Details.l.info("["+this.getClass()+"]"+"Session Created!!!!!!!!!!!!!!!!!!!#####$@@@@");
Details.l.info(" 2>>>>>session ID is : " + session.getId());
}
Details.l.info(" 3>>>>>session ID is : " + session.getId());
// System.out.println("session ID is : " + session.getId());
Details DTO = new Details(request);
String loc = DTO.findMyLocation();
session.invalidate();
这里,我在servlet的最开始创建一个会话,其逻辑是如果会话已经存在,那么为该特定用户提供hat会话ID,或者如果该特定用户不存在会话,请创建一个新的会话,然后给出新的会话ID,这里新的会话是在IF条件内创建的,我已经以各种可能的方式进行了测试(我已经使用了两个不同的系统并试图在一个系统上点击servlet)但是控制永远不会进入创建会话的循环。但我看到每次我打到servlet我都会得到一个新的会话ID!请问有人可以解释我的servlet的这种行为吗?我对会话和servlet很新! 在此先感谢..
答案 0 :(得分:1)
JSP会隐含地创建会话,除非在page指令中将session设置为false:
<%@ page session="false" %>
这就是为什么你的servlet总能看到已经存在的会话。只需在浏览器地址栏中输入servlet的地址(假设您发布的代码在doGet()
方法中),而不是通过JSP调用它,您应该看到servlet创建一个新会话。
编辑:请注意,规范说明了此会话属性,它可用于指定JSP不参与会话。没有什么能保证在调用JSP时不会创建任何会话。只有这样,如果您尝试从此JSP访问会话,您将获得异常。
答案 1 :(得分:0)
您可能希望使用request.getSession(true)来始终创建会话。