会话Session的持久化处理

问题:什么是持久化?让我们用一张图片来进行说明吧。

会话Session的持久化处理_第1张图片

Session的持久化:

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

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

org.apache.catalina.session.StandardManager

org.apache.catalina.session.PersistentManager

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

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

2、PersistentManager能够把HttpSession对象保存到Session Store中,它提供了相比StandardManager更加灵活的管理能力,具有容错能力,控制内存中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应用的元素加入元素,例如:



       

              debug=0;

              saveOnRestart=”true”

              maxActiveSessions=”-1”

              minIdleSwap=”-1”

              maxIdleSwap=”-1”

              maxIdleBackup=”-1”

              

       

 

属性作用
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应用的元素加入元素,例如:



       

              debug=0;

              saveOnRestart=”true”

              maxActiveSessions=”-1”

              minIdleSwap=”-1”

              maxIdleSwap=”-1”

              maxIdleBackup=”-1”

              

       

 

说明:上面的元素属性的含义与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)

); 



参考:

blog.csdn.net/mr_li13/article/details/48896915

liaohexiang.iteye.com/blog/826268

你可能感兴趣的:(Java)