【15】Session

Session

一、概述

当用户访问服务器的web资源时,服务器会给每个用户浏览器创建一个独享会话对象(Session对象),也是一个域对象,存放用户的数据。当用户再次访问时,就可以拿出这些数据给用户服务了。

二、实现原理

  1. 服务器如何识别不同用户浏览器的?

    当用户浏览器第一访问服务器时,服务器向浏览器发送一个带JSESSIONID的cookie。当用户浏览器再次发出请求时,通过判断带过来的Cookie来识别不同的用户浏览器。

  2. 服务器怎么知道浏览器关闭了呢?

    因为服务器发送给浏览器的cookie没有设置有效时间,cookie数据是存在内存中的,所以关闭浏览器,cookie被清除。下次发出请求时浏览器没有带过来相关的cookie,服务器会重新创建一个session。那么,旧的session呢?它有个定时器,默认是30分钟,在这之后没有新的请求,session就会被清除。

三、Servlet Session API

  1. 获取Session

    Session的创建是服务器的事。已经存在就获取,不存在就重建;一个浏览器独占一个Session对象。

    request.getSession();
  2. 添加和获取Session数据

    session.getAttribute(name);
    session.setAttribute(name,value);
  3. 实现浏览器关闭后还能找到原来的session

    1. 自己创建一个同名(JSESSIONID)的Cookie,覆盖原来的Cookie,再设置有效时间

      response.addCookie(new Cookie("JSESSIONID",session.getId()+"").setMaxAge(60*30));
    2. 确保Cookie有效时间和Session销毁时间一致

      tomcat服务器的默认session销毁时间是30min
      可以通过在项目中的web.xml添加session-timeout来实现延长session的生存时间

      <session-config>
      <session-timeout>30</session-timeout>
      </session-config>

你可能感兴趣的:(session,javaweb,cookie)