文档章节

Tomcat Session 持久化

Sobey
 Sobey
发布于 2014/12/23 15:34
字数 783
阅读 3574
收藏 38

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" 
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

© 著作权归作者所有

Sobey
粉丝 4
博文 43
码字总数 16279
作品 0
黄浦
高级程序员
私信 提问
加载中

评论(1)

圊國圊國
圊國圊國
<Store
calssName="org.apache.catalina.JDBCStore" 改为 className0
重启Tomcat,session没有被销毁

Tomcat默认的Session持久化的效果(默认是开启的) 在默认的情况下,Tomcat6是提供了这项功能的。请查看$TOMCAT_HOME$/conf/context.xml。 找到 <Manager pathname="" /> 若该句注释,则表示...

dinggosumsung
2018/01/21
0
0
Tomcat Session 持久化

Session的主要数据被存储在服务器内存中,而服务器会为每个在线用户创建一个Session对象,当在线用户很多时,例如同时有几万或是几十万在线的情况下,Session内存的开销将会十分巨大,会影响...

不正经啊不正经
2014/12/26
0
1
Tomcat7+Redis存储Session

详情见官网:https://github.com/jcoleman/tomcat-redis-session-manager 前提:你已经部署了Redis,尚未学会的,可以移步这里:http://blog.csdn.net/caiwenfengfor23/article/details/4551......

独钓渔
2016/03/09
50
0
Tomcat_异常_02_IOException while loading persisted sessions: java.io.EOFException

异常原因: EOFException表示输入过程中意外地到达文件尾或流尾的信号,导致从session中获取数据失败。 这是由于tomcat上次非正常关闭时有一些活动session被持久化(表现为一些临时文件),在...

rayner
2017/09/15
0
0
Tomcat7.0源码分析——Session管理分析(上)

前言   对于广大java开发者而言,就J2EE规范中的Session应该并不陌生,我们可以使用Session管理用户的会话信息,最常见的就是拿Session来存放用户登录、身份、权限及状态等信息。对于使用T...

beliefer
2016/09/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

win mysql 安装笔记

官方下载zip的mysql包,解压即可 目录: D:\mysql_file\mysql-5.7.26-winx64 在该目录下新建一个文件夹data (如果操作过程中失败,要把data中的所有文件删掉) 新建一个文件,命名为my.ini,内容...

_大侠__
24分钟前
2
0
第八届“中国软件杯”初赛评审完美收官,课工场赛题备受关注

日前,由工业和信息部、教育部、江苏省人民政府共同创办第八届“中国软件杯”大学生软件设计大赛初赛评审历时两天,于 6 月 23 日圆满结束。由中国科学院软件研究所专家、各高校软件学院相关...

IFTNews
36分钟前
0
0
日期居然用字符串保存?我笑了

微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 老司机倾囊相授,带你一路进阶,来不及解释了快上车! 我发现数据库有些日期居然用字符串...

后端进阶
39分钟前
2
0
c 基础教程四:c 输入输出(二)

在C语言中,有三个函数可以用来在显示器上输出数据,它们分别是: puts():只能输出字符串,并且输出结束后会自动换行 putchar():只能输出单个字符 printf():可以输出各种类型的数据 prin...

故城以南丶思念不安
40分钟前
1
0
SSO简单实现与理解

SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机...

如同相见恨晚
41分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部