Tomcat Session 持久化

Session的主要数据被存储在服务器内存中,而服务器会为每一个在线用户建立一个Session对象,当在线用户不少时,例如同时有几万或是几十万在线的状况下,Session内存的开销将会十分巨大,会影响Web服务器性能。而Session的钝化机制恰好可解决此问题。Session钝化机制的本质就在于把服务器中不常常使用的Session对象暂时序列化到系统文件系统或是数据库系统中,当被使用时反序列化到内存中,整个过程由服务器自动完成。java

实现:mysql

         要完成session持久化,存放在session里的对象必需要实现java.io.Serializable 接口。web

         Tomcat经过两个session管理类实现session持久化,StandardManager (默认)PersistentManagersql

StandardManager不使用任何的Store,Tomcat正常关闭,重启或Web应用从新加载时,它会将内存中的session序列化到Tomcat目录下数据库

/work/Catalina/host_name/webappname/SESSIONS.ser文件中。当Tomcat重启或应用加载完成后,tomcat会将文件中的session从新还原到内存中。apache

注:若是忽然终止该服务器,则全部会话都将丧失,由于StandardManager没有机会实现存盘处理。tomcat

PersistentManager: 经过使用Store,将内存中的session备份到文件或数据库中。当备份一个session对象时,该session对象会被复制到存储器中,而原对象仍然留在内存中。所以若是服务器崩溃,就能够从存储器中获取活动的session对象。当session被换出时,他会被移动到存储器中,由于当前活动的session对象超过了上限值,或者session对象闲置了过长时间。换出session节省内存空间。服务器

配置:session

Tomcat默认是已经启用持久化配置,若要禁用持久化功能,则只须要在<Context>节点里配置app

<Manager pathname="" />

         持久化配置可进行全局配置和针对某一站点进行配置。全局配置须要在cof文件夹context.xml

<Context>节点中配置<Manager>,若要针对某一站点配置则须要在cof文件夹server.xml<Host><Context>

节点中添加<Manager>配置。

StandardManager

<Manager

className=”org.apache.catalina.session.StandardManager” 

debug=”0”

maxInactiveInterval=”-1″

/>

PersistentManager:

方式1

<Manager

className="org.apache.catalina.session.PersistentManager"

saveOnRestart="true"

maxActiveSession="-1"

minIdleSwap="0"

maxIdleSwap="30"

maxIdleBackup="0"

<Store

className="org.apache.catalina.session.FileStore"

checkInterval=”60”

directory="../session"/>

</Manager>

方式2

和方式1的区别:

<Store 

calssName="org.apache.catalina.JDBCStore"

driverName="com.mysql.jdbc.Driver" 
connectionURL="jdbc:mysql://localhost/tomsessionDB?user=root&password=" 
sessionTable="tomcat_session" 

sessionIdCol="session_id" 

sessionDataCol="session_data" 
sessionValidCol="session_valid" 

sessionMaxInactiveCol="max_inactive" 
sessionLastAccessedCol="last_access"

sessionAppCol="app_name" 

checkInterval="60" 

debug="99" />

参数说明:

maxActiveSessions-可处于活动状态的session数,default -1 不限制

checkInterval 检查session是否过时的时间间隔,default 60s

saveOnRestart-服务器关闭时,是否将全部的session保存到文件中;
minIdleSwap/maxIdleSwap
session处于不活动状态最短/长时间(s)sesson对象转移到File Store中;(1表示没有限制)
maxIdleBackup
超过这一时间,将session备份。(1表示没有限制)

directory-文件存储位置work\Catalina\host name\web app\session\文件名.session

相关文章
相关标签/搜索