Session的主要数据被存储在服务器内存中,而服务器会为每个在线用户创建一个Session对象,当在线用户很多时,例如同时有几万或是几十万在线的情况下,Session内存的开销将会十分巨大,会影响Web服务器性能。而Session的钝化机制刚好可解决此问题。Session钝化机制的本质就在于把服务器中不经常使用的Session对象暂时序列化到系统文件系统或是数据库系统中,当被使用时反序列化到内存中,整个过程由服务器自动完成。 实现: 要完成session持久化,存放在session里的对象必须要实现java.io.Serializable 接口。 Tomcat通过两个session管理类实现session持久化,StandardManager (默认),PersistentManager StandardManager:不使用任何的Store,当Tomcat正常关闭,重启或Web应用重新加载时,它会将内存中的session序列化到Tomcat目录下 /work/Catalina/host_name/webappname/SESSIONS.ser文件中。当Tomcat重启或应用加载完成后,tomcat会将文件中的session重新还原到内存中。 注:如果突然终止该服务器,则所有会话都将丧失,因为StandardManager没有机会实现存盘处理。 PersistentManager: 通过使用Store,将内存中的session备份到文件或数据库中。当备份一个session对象时,该session对象会被复制到存储器中,而原对象仍然留在内存中。因此如果服务器崩溃,就可以从存储器中获取活动的session对象。当session被换出时,他会被移动到存储器中,因为当前活动的session对象超过了上限值,或者session对象闲置了过长时间。换出session节省内存空间。 配置: Tomcat默认是已经启用持久化配置,若要禁用持久化功能,则只需要在<Context>节点里配置 <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" sessionIdCol="session_id"
sessionDataCol="session_data"
sessionMaxInactiveCol="max_inactive" sessionAppCol="app_name" checkInterval="60" debug="99" /> 参数说明: maxActiveSessions-可处于活动状态的session数,default -1 不限制 checkInterval - 检查session是否过期的时间间隔,default 60s
saveOnRestart-服务器关闭时,是否将所有的session保存到文件中; directory-文件存储位置work\Catalina\host name\web app\session\文件名.session (责任编辑:IT) |