httpsession

1、session是由服务器建立的,并保存在服务器上。服务器会为每一个浏览器创建一个session。如果访问的资源中调用了reques.getSession()方法,那就会创建一个HttpSession,并产生一个JSESSIONID。

2、服务器响应浏览器时,则响应中会包含cookie(set-cookie),cookie的值中会放入JSESSIONID的值

3、浏览器会将这个cookie放入内存中

4、浏览器再次请求时,会将这个cookie放在请求头中,给服务器发送请求

5、服务器会在缓存中查找等于JSESSIONID的session的内容,并发送给浏览器

场景:

1、用户登录某系统后,创建了session(这个session中存入了此用户的用户名,并保存在服务器上),并产生了JSESSIONID。同时本地浏览器会保存这个JSESSIONID。

2、进入某个菜单时需要知道这个用户的用户名,那么这时不需要用户再次输入用户名。当发送请求时在请求头中加入JSESSIONID,服务器会在缓存中查找等于JSESSIONID的session的内容,并发送给浏览器

测试:

1、首先创建一个TestServlet,继承自HttpServlet

public class TestServlet extends HttpServlet{
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
        HttpSession session=request.getSession();//创建session
        response.setContentType("text/html;charset=utf-8");    
        response.getWriter().write("查看是否有cookie:");
        //判断session是不是新建的
        if(session.isNew()) {
            
            response.getWriter().write("新建session,JSESSIONID="+session.getId());
            session.setAttribute("username1", "admin");//将数据保存到session中

        }else {
            response.getWriter().write("session已经存在,JSESSIONID="+session.getId());
            response.getWriter().write((String)session.getAttribute("username1"));        
        }       
    }
}

知识点:

(1)用HttpServletRequest 的getSession()方法获取HttpSession;

(2)用HttpSession的setAttribute方法设置session

(3)用HttpSession的getAtrribute方法获取session

(4)用HttpSession的getId()方法获取session的id

2、在web.xml中创建TestServlet类所映射的访问路径

<servlet>
      <servlet-name>testServlet</servlet-name>
      <servlet-class>com.htkeystone.rqi.test.TestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>testServlet</servlet-name>
      <url-pattern>/SessionServlet</url-pattern>
  </servlet-mapping> 

3、在浏览器中访问http://localhost:8081/htRQI/SessionServlet ,浏览器输出如下:

可见,浏览器新建了session。

4、打开浏览器的session界面,如下图:

上图中的“内容”就是session的id。

5、再次访问http://localhost:8081/htRQI/SessionServlet ,浏览器输出如下:

可见浏览器没有再创建新的session,并且取出了username1所对应的值。

打开浏览器,按F12打开开发者工具,点击网络,并打开捕获按钮,重新刷一下界面。访问:http://localhost:8081/htRQI/SessionServlet 

双击对应访问路径这一行,可以看到请求标头中包含了cookie。

原文地址:https://www.cnblogs.com/BonnieWss/p/9104743.html