java会话 - 什么时候实际创建会话?

时间:2014-04-12 12:51:10

标签: java session servlets

我的代码,

        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很新! 在此先感谢..

2 个答案:

答案 0 :(得分:1)

JSP会隐含地创建会话,除非在page指令中将session设置为false:

<%@ page session="false" %>

这就是为什么你的servlet总能看到已经存在的会话。只需在浏览器地址栏中输入servlet的地址(假设您发布的代码在doGet()方法中),而不是通过JSP调用它,您应该看到servlet创建一个新会话。

编辑:请注意,规范说明了此会话属性,它可用于指定JSP不参与会话。没有什么能保证在调用JSP时不会创建任何会话。只有这样,如果您尝试从此JSP访问会话,您将获得异常。

答案 1 :(得分:0)

您可能希望使用request.getSession(true)来始终创建会话。