tomcat中的HttpSession

tomcat中的HttpSession,tomcat,servlets,webserver,httpsession,Tomcat,Servlets,Webserver,Httpsession,我们在web应用程序中使用tomcat,在Javax.servlet.http.HttpSession中使用HttpSession进行会话管理 这就是我们在HTTPSession中设置会话Id和几个用户属性的方式 HTTPSession session = request.getSession() session.setAttribute("sessionIdNo",sessionIdNo); 这就是我们如何获得会话Id和在上一次HTTP调用中存储的几个用户属性的方法 HTTPSession

我们在web应用程序中使用tomcat,在Javax.servlet.http.HttpSession中使用HttpSession进行会话管理

这就是我们在HTTPSession中设置会话Id和几个用户属性的方式

HTTPSession session = request.getSession()
session.setAttribute("sessionIdNo",sessionIdNo);
这就是我们如何获得会话Id和在上一次HTTP调用中存储的几个用户属性的方法

HTTPSession session=request.getSession(); session.getAttribute(“sessionIdNo”)

我的问题是

  • 在下一个来自浏览器的HTTP调用中,我们能够在服务器端获得会话属性,该属性是在HTTPSession的上一个HTTP调用中设置的

    注意:我也没有保存在cookies中,我相信它不是从我的浏览器发送的。 它是否与JSESSION_ID有任何连接

  • 如果是这样,我的第二个问题是,这些HTTP会话管理在桌面应用程序中是如何工作的?我是说,不使用浏览器? 我的意思是如何利用JESSION_ID进行会话管理

  • 如果不是,那另一种方法是什么


  • HttpSession意味着HTTP的使用。在浏览器中,JSESSIONID cookie用于引用会话。用户第一次进入时会被分配一个新的会话id(request.getSession().getId())。这将被放入JSESSIONID cookie并发送回浏览器。在后续请求中,浏览器发送cookie,告知Tomcat使用哪个会话

    如果您创建了桌面应用程序,可能需要使用不同的机制。但Tomcat在某种程度上是HTTP服务器,因此这是“正常”机制。桌面应用程序仍然可以与Tomcat和基于web的服务交互,但它的UI可能会以JavaSwing等方式呈现

    编辑

    只需一点代码,您就可以看到会话被创建和销毁:

    import javax.servlet.annotation.WebListener;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    @WebListener
    public class DemoSessionListener implements HttpSessionListener {
    
        @Override
        public void sessionCreated(HttpSessionEvent sessionEvent) {
            System.out.println("session \"" + sessionEvent.getSession().getId() +
                               "\" created);
            }
        }
    
        @Override
        public void sessionDestroyed(HttpSessionEvent sessionEvent) {
            System.out.println("session \"" + sessionEvent.getSession().getId() +
                               "\" destroyed);
        }
    }
    

    如果我使用curl命令运行HTTP调用,它仍然能够在下一次调用中使用相同的HttpSession。怎么可能呢?我的HttpSession如何在下一次调用中使用同一会话。我也没有在cookies中传递任何输入字段。你如何确定这是同一个会话?看起来curl在默认情况下不会打开cookies,所以听起来不太对劲。