【Servlet】Session会话跟踪技术

Session

Session是指使用HttpSession对象实现会话跟踪的技术,是一种在服务器端保持会话跟踪的解决方案。

HttpSession对象是javax.servlet.http.HttpSession接口的实例,也称为会话对象。

HttpSession对象会在用户第一次访问服务器时由容器创建(注意只有访问JSP、Servlet等程序时才会创建,只访问HTML、IMAGE等静态资源并不会创建),当用户调用其失效方法(invalidate()方法)或超过其最大不活动时间时会失效。在此期间,用户与服务器之间的多次请求都属于同一个会话。

Session和Cookie的主要区别在于:

  • Cookie是把用户的数据写给用户的浏览器。
  • Session技术把用户的数据写到用户独占的Session中。

服务器在创建会话对象时,会为其分配一个唯一的会话标识——SessionId,以“JSESSIONID”的属性名保存在客户端Cookie中,在用户随后的请求中,服务器通过读取Cookie中的JSESSIONID属性值来识别不同的用户,从而实现对每个用户的会话跟踪。

Session工作原理

【Servlet】Session会话跟踪技术

获取HttpSession对象

HttpServletRequest接口提供了获取HttpSession对象的方法:

【Servlet】Session会话跟踪技术

在程序中第一次执行request.getSession()时,服务器才会创建Session。

HttpSession接口提供的方法

HttpSession接口提供了存取会话域属性和管理会话生命周期的方法:

【Servlet】Session会话跟踪技术

Session存取数据

  • 存储会话域属性:session.setAttribute("username"," haha");
  • 会话域中获取属性值:String uname = (String)session.getAttribute("username");
  • 会话域中删除属性:session.removeAttribute("username");
  • 用户登录示例: 当用户当用户登录成功后,将用户信息存储到Session中,并重定向到主页面显示用户信息。

Session生命周期

  • Session失效时间:Session具有一定声生命周期,如果Session超过会话的最大不活动时间,会话自动失效,会话的最大不活动时间指会话超过此时间段不进行任何操作。
  • 设置Session的失效时间。
    • 方法1:在工程的web.xml中配置Session的生命周期,单位为分钟。
      <Session-config><Session-timeout>15</Session-timeout></Session-config>
    • 方法2:在程序硬编码设置。
      Session.setMaxInactiveInterval(30 * 60); //设置单位为秒,设置为-1永不过期;
    • 方法3:在Tomcat安装目录下conf/web.xml中配置(Web容器级别)。
      <Session-config><Session-timeout>15</Session-timeout></Session-config>
  • 手动销毁Session:可以通过调用invalidate()方法立即清除会话对象及其所有会话域属性,同时响应客户端浏览器清除Cookie中的JSessionID,在实际应用中,此方法多用来实现系统的“安全退出”功能。
上一篇:IT兄弟连 JavaWeb教程 监听器2


下一篇:java – Spring服务器/客户端会话和Hibernate会话