Session的持久化

Session的持久化: 

Session的持久化就是将HttpSession对象从内存中转移到文件系统或数据库中,这样做的好处是:减少系统资源的占用,如果Servlet容器突然关闭或重启,或Web应用重启,这些持久化了的HttpSession对象可以再重新加载进来,对于客户端,还是使用同一个Session。 

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

l         org.apache.catalina.session.StandarManager 

l         org.apache.catalina.session.PersistentManager 

1、StandarManager是默认的Session Manager。它的实现机制是:当Tomcat服务器关闭或重启,或Web应用被重新加载时,会将内存中所有的HttpSession对象保存到文件系统中,默认的文件路径是:%CATALINA_HOME%\work\Catalina\<applicaton-name>\SESSIONS.ser 

重启Tomcat后,Tomcat服务器把SESSIONS.ser中的持久化HttpSession对象加载到内存中。 

2、PersistentManager能够把HttpSession对象保存到Session Store中,它提供了比较StandarManager更灵活的管理功能,具有容错能力,控制内存中HttpSession对象的数目等。 

Tomcat实现Session Store的接口为org.apache.catalina.session.Store,目前提供了两个实现这一接口的类:org.apache.catalina.session.FileStore和org.apache.catalina.session.JDBCStore。FileStore会将HttpSession对象保存到文件系统中;而JDBCStore则将HttpSession对象保存到数据库表中。 

下面给出这两个类的配置: 

配置FileStore: 

在server.xml中,在Web应用的<Context>元素加入<Manager>元素,例如: 

<Context path=”/helloapp” docBase=”helloapp” debug=”0” reloadable=”true”> 

       <Manager className=”org.apache.catalina.session.PersistentManager”> 

              debug=0; 

              saveOnRestart=”true” 

              maxActiveSessions=”-1” 

              minIdleSwap=”-1” 

              maxIdleSwap=”-1” 

              maxIdleBackup=”-1” 

              <Store className=”org.apache.catalina.session.FileStore” directory=”mydir”/> 

       </Manager> 

</Context> 

属性 

作用 

className 

指定Session Manager的实现类名,或Session Store的实现类名 

debug 

设定Session Manager采用的跟踪级别,取值0到99,越小越跟踪信息越少,发布产品时,应该设置为0,以提高性能。 

saveOnRestart 

如果为true,则当Tomcat关闭时,所有的有效HttpSession对象都保存到Session Store中;当Tomcat重启时,加载这些HttpSession对象。 

maxActiveSessions 

设置处于活动状态的Session的最大数目,如果超过这一数目,Tomcat把一些超过的Sessin对象保存到Session Store中。-1表示不限制。 

minIdleSwap 

Session处于不活动状态的最小时间,单位为秒,超过这一时间,Tomcat有可能把这个Session对象移到Session Store中。 

maxIdleSwap 

Session处于不活动状态的最大时间,超过这一时间,Tomcat就一定会将这个Session对象移到Session Store中。

maxIdleBackup 

Session处于不活动状态的最大时间,超过这一时间,Tomcat就就会将这个Session对象拷贝到Session Store中进行备份。 

directory 

指定Session Store在哪个文件系统目录下存放持久化的Session对象的信息,文件名是Session ID.session。 

配置JDBCStore: 

在server.xml中,在Web应用的<Context>元素加入<Manager>元素,例如: 

<Context path=”/helloapp” docBase=”helloapp” debug=”0” reloadable=”true”> 

       <Manager className=”org.apache.catalina.session.PersistentManager”> 

              debug=0; 

              saveOnRestart=”true” 

              maxActiveSessions=”-1” 

              minIdleSwap=”-1” 

              maxIdleSwap=”-1” 

              maxIdleBackup=”-1” 

              <Store className=”org.apache.catalina.session.JDBCStore” 

                     driverName=”com.mysql.jdbc.Driver” 

                     connectionURL=”jdbc:mysql://localhost:3306/demo?user=root password=1234” 

                     sessionTable=”tomcat_sessions” 

                     sessionIdCol=”session_id” 

                     sessionDataCol=”session_data” 

                     sessionValidCol=”session_valid” 

                     sessionMaxInactiveCol=”max_inactive” 

                     sessionLastAccessedCol=”last_access” 

                     sessionAppCol=”app_name” 

                     checkInterval=”60” 

                     debug=”0” 

              /> 

       </Manager> 

</Context> 

说明:上面的元素属性的含义与FileStore的相同,上面的配置假设在MySQL服务器上的demo数据库的tomcat_sessions表中存放持久化Session对象的信息,这个表的结构如下: 

CREATE TABLE tomcat_sessions( 

       session_id VARCHAR(10) NOT NULL PRIMARY KEY, 

       session_data MEDIUMBLOB, 

       session_valid CHAR(1) NOT NULL, 

       max_inactive   INT NOT NULL, 

       last_access     BIGINT NOT NULL, 

       app_name       VARCHR(255), 

       KEY kapp_name(app_name) 

);

你可能感兴趣的:(Session的持久化)