使用tomcat的持久化会话管理器PersistentManager实现会话持久化
在项目的META_INF放入context.xml文件内容如下
---------------context内容如下-------------------------------------
<Context reloadable="true">
<Manager className="org.apache.catalina.session.PersistentManager"saveOnRestart="true"//设为true,当web应用终止时,会把内存中的所有HttpSession对象保持到Stroe(持久化存储设备中),当web重启时会加载这些会话对象
maxActiveSessions="10" //运行时会话(不活动会话和活动会话)的最大数目,此时会话在内存中
minIdleSwap="60" //会话最短空闲60秒,则可能保存到数据库
maxIdleSwap="120"//会话最长空闲120秒,则必须保存到数据库
maxIdleBackup="180"//会话最长空闲180秒,则保持到数据库,并且在内存中存在
maxInactiveInterval="300">
<!--sessionMaxInactiveCol会话处于不活动的最长(过期)时间(即用户一直没有发起请求) ;后面的对应的值都是表示数据库中对应的字段-->
<Store className="org.apache.catalina.session.JDBCStore"
driverName="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:HZC"
connectionPassword='hzc'
connectionName='hzc'
sessionTable="session_table" //表名
sessionIdCol="session_id"
sessionDataCol="session_data"
sessionValidCol="valid_session"
sessionMaxInactiveCol="max_inactive"
sessionLastAccessedCol="last_access" //最后访问时间
sessionAppCol="app_name"
checkInterval="60" /> <!-- 定期检查会话状态的时间间隔,在数据库发现会话失效,会删除会话记录 -->
</Manager>
</Context>
------------------------------
一旦上面配置了,该配置文件就好被放到
Tomcat 6.0\conf\Catalina\localhost下面保存起来,下次启动时还会去读。
如果这个文件不去手动删除的话,比如你上面数据库连接写错了,,会包如下连接错误。
org.apache.catalina.session.JDBCStore open 严重: JDBC driver class not found java.lang.ClassNotFoundE
下次启动如果更改了上面的配置文件,则Tomcat 6.0\conf\Catalina\localhost下面的context文件里面的内容会是旧的内容。。
所以启动时会一直报错数据库连接失败,其实web启动时读的都是Tomcat 6.0\conf\Catalina\localhost下面的旧版本,,
在里面配置session过期时间;10分钟。如果10分钟内用户一直没有发起新的请求,则到10分钟后,数据库会自动删掉记录。当然是tomcat容器去管理的,不是随便就自己给没了。
数据库存储会话结果:
600表示会话过期时间:10分钟,
valid_session表示会话是否可用;
Session_data:会话保存的数据:类型为blob二进制类型。可用把对象序列化进行保存,读取时通过反序列化读取
可以把时间戳用浏览器调试F12,然后进行时间格式化查看时间