会话Session的持久化处理

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

Session持久化

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\<applicaton-name>\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应用的<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)

); 



参考:

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

liaohexiang.iteye.com/blog/826268

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值