zoukankan      html  css  js  c++  java
  • Session的使用与管理

        Web服务器跟踪客户状态通常有以下4种方法:

        (1)建立含有跟踪数据的隐藏表格字段

        (2)重写包含额外参数的URL

        (3)使用持续的Cookie

        (4)使用Servlet API中的Session(回话)机制

        HTTP是无状态的协议。当有多个用户同时访问Web应用的某一组件时,它们的请求地址URL是相同的。

        在Java Servlet API中引入Session机制来跟踪客户的状态。Session指的是在一段时间内,单个客户与Web服务器的一连串相关的交互过程。在一个Session中,客户可能会多次请求访问同一个网页,也有可能请求访问各种不同的服务器资源。

        例如,在电子邮件应用中,从一个客户登录到电子邮件系统开始,经过收信和发信等一系列操作,直至最后退出邮件系统,整个过程为一个Session。再比如,在网上书店应用中,从一个客户开始购物,到最后结账,整个过程为一个Session。

        Session拥有特定的生命周期。在以下情况中,Session将结束生命周期,Servlet容器会将Session所占用的资源释放掉:

      (1)客户关闭浏览器

      (2)Session过期

      (3)服务器端调用了HttpSession的invalidate()的方法

        Note:Session过期是指当Session开始后,在一段时间内客户没有和Web服务器交互,这个Session会失效,HttpSession类的setMaxInactiveInterval()方法可以设置允许Session保持不活动状态的时间(以秒为单位),如果超过这一时间,Session就会失效。

        Session的持久化

        把HttpSession对象保存到文件系统或数据库中的方法,采用了Java语言提供的对象序列化技术。如果把HttpSession对象从文件系统或数据库中恢复到内存中,则采用了Java语言提供的对象反序列化技术。

        Session持久化的好处:

        (1)降低内存资源的消耗,提高对内存资源的利用率。

        (2)当Web服务器因故障而终止时,可以从文件系统或数据库中恢复Session数据。

        Session的持久化是由Session Manager来管理的。Tomcat提供了两个实现类:

    •     org.apache.catalina.session.StandardManager
    •     org.apache.catalina.session.PersistentManager

        1. StandardManager

        StandardManager是默认的Session Manager。其实现机制为:当Tomcat关闭或重启,或者Web应用被重新加载时,会对在内存中的HttpSession对象进行持久化,把它们保存到文件系统中,默认的文件为:

       <CATALINA_HOME>/work/Catalina/hostname/applicationname/SESSION.ser

        2. PersistentManager

        PersistentManager能够把Session对象保存到Session Store中,它提供了比StandardManager更为灵活的Session管理功能,它具有以下功能:

        (1) 当Tomcat关闭或重启,或者Web应用被重新加载时,会对在内存中的HttpSession对象进行持久化,把它们保存到Session Store中。

        (2)具有容错功能,及时把Session备份到Session Store中,当Tomcat意外关闭后再重启时,可以从Session Store中恢复为Session对象。

        (3)可以灵活控制在内存中的Session数目,将部分Session转移到Session Store中。

         Tomcat实现持久化Session Store的接口为org.apache.Catalina.Store,目前提供了两个实现这一个接口的类:org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore。

  • 相关阅读:
    JavaScript高级程序设计学习笔记事件(一)(事件流、事件处理程序/事件侦听器)
    JavaScript高级程序设计学习笔记事件(二)(事件对象DOM中的事件对象/IE中的事件对象/跨浏览器的事件对象)
    闭包学习小记
    JavaScript高级程序设计学习笔记DOM(一)(节点层次Node类型节点关系/操作节点)
    打印网页内容
    尝试写第一个js插件 图片轮播
    JavaScript高级程序设计学习笔记面向对象的程序设计(一) 创建对象 (工厂模式、构造函数模式、原型模式等)
    jQuery二维码插件 jquery.qrcode.js
    ajax请求地址后加随机数防止浏览器缓存
    location.href 和document.referrer、event.keyCode、setTimeout 与setInterval、前置与后置型递增递减操作符
  • 原文地址:https://www.cnblogs.com/zhujunhuawoaini/p/3381580.html
Copyright © 2011-2022 走看看