Session的持久化

Session的持久化:

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

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

lorg.apache.catalina.session.StandarManager

lorg.apache.catalina.session.PersistentManager

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

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

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

Tomcat实现SessionStore的接口为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>元素,例如:

<Contextpath=”/helloapp”docBase=”helloapp”debug=”0”reloadable=”true”>

<ManagerclassName=”org.apache.catalina.session.PersistentManager”>

debug=0;

saveOnRestart=”true”

maxActiveSessions=”-1”

minIdleSwap=”-1”

maxIdleSwap=”-1”

maxIdleBackup=”-1”

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

</Manager>

</Context>

属性

作用

className

指定SessionManager的实现类名,或SessionStore的实现类名

debug

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

saveOnRestart

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

maxActiveSessions

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

minIdleSwap

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

maxIdleSwap

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

maxIdleBackup

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

directory

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

配置JDBCStore:

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

<Contextpath=”/helloapp”docBase=”helloapp”debug=”0”reloadable=”true”>

<ManagerclassName=”org.apache.catalina.session.PersistentManager”>

debug=0;

saveOnRestart=”true”

maxActiveSessions=”-1”

minIdleSwap=”-1”

maxIdleSwap=”-1”

maxIdleBackup=”-1”

<StoreclassName=”org.apache.catalina.session.JDBCStore”

driverName=”com.mysql.jdbc.Driver”

connectionURL=”jdbc:mysql://localhost:3306/demo?user=rootpassword=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对象的信息,这个表的结构如下:

CREATETABLEtomcat_sessions(

session_idVARCHAR(10)NOTNULLPRIMARYKEY,

session_dataMEDIUMBLOB,

session_validCHAR(1)NOTNULL,

max_inactiveINTNOTNULL,

last_accessBIGINTNOTNULL,

app_nameVARCHR(255),

KEYkapp_name(app_name)

);

相关推荐