概念:Session用来跟踪客户状态,将数据以键值对形式存放在服务端。

应用场景:当多个用户以同一个URL发出请求时,Session就用来标识是哪个用户发出的请求,以实现后续操作。

会话机制:Servlet容器(Tomcat)为每一个会话分配一个HttpSession对象,由Servlet容器管理。用户保留一个name为JSESSIONID的Cookie(Cookie是客户端保存信息的机制),在于服务端交互时,Servlet容器在HTTP请求头中自动查找这个Cookie,以找到与之对应的HttpSession对象或创建新的HttpSession对象,并在响应时在HTTP响应头中添加这个name为JSESSIONID的Cookie。(当Cookie被禁用时,使用URL重写机,在URL后添加;jessionid=XXX以传输HttpSession对象标识)

Web应用生命周期:与ServletContext对象生命周期一致。可通过getServletContext()方法获取ServletContext对象。

会话生命周期:
             1、创建:
                         一个浏览器进程第一次访问一个支持会话的网页就会创建新的HttpSession对象,并生成Cookie添加到响应中;
                         当会话被销毁后,浏览器进程再次访问一个支持会话的网页,因为Cookie依然存在,但对于HttpSession已经被销毁,所以重新创建                                   HttpSession对象;
             2、使用:
                        getAttribute(String name)获取对应键值;
                        setAttribute(String name, Object value)设置键值;
             3、销毁:
                         浏览器停止运行;
                         Session过期:    setMaxInactiveInterval(int interval)设置Session失效时间;
                         服务端主动销毁:removeAttribute(String name)销毁HttpSession中的某一键值数据;
                                                     invalidate()销毁当前HttpSession对象;
                         注意:Tomcat的Web应用被终止时,会话不会被销毁,而是被Tomcat持久化到永久性存储器中。

会话的可持久化:将HttpSession对象从内存中转移到永久性设备(文件系统、数据库)中,以节约内存空间,与确保服务器重启或Web应用重启后,会                             话信息依旧可用。要想实现持久化,涉及到的相关类必须实现java.io.Serializable接口
    
会话管理器:     org.apache.catalina.session.StandardManager标准会话管理器
                                  ——持久化文件SESSIONS.ser,可在META-INF/context.xml的<Context>元素下配置<Manager>元素以控制Session
                          org.apache.catalina.session.PersistenceManager持久化会话管理器
                                  ——需在配置<Manager>元素基础上配置<Store>元素

会话监听:
                 1、HttpSessionListener接口
                             通过sessionCreated(HttpSessionEvent event)监听HttpSession的创建,创建时调用;
                             通过sessionDestroyed(HttpSessionEvent event)监听HttpSession的销毁,销毁前调用;
                 2、HttpSessionAttributeListener接口
                             通过attributeAdded(HttpSessionBindingEvent event)监听添加属性;
                             通过attributeRemoved(HttpSessionBindingEvent event)监听删除属性;
                             通过attributeReplaced(HttpSessionBindingEvent event)监听修改属性值;
                 以上两种监听机制,需要在web.xml中注册:
                             <Listener>
                                  <listener-class></listener-class>
                             </Listener>
                 3、HttpSessionBindingListener接口,监听会话与属性绑定或解除绑定事件
                             属性绑定是在HttpSession对象创建后,解除绑定是在HttpSession销毁前,可以实现在线人数的统计。
                 4、HttpSessionActivationListener接口,监听会话被激活与被搁置事件
                             



本文转载:CSDN博客