为什么session不能持久化 Persistent Manager问题

dongdandan 2007-03-14 09:42:40
看孙卫琴的tomcat与java web开发技术详解,里面的Persistent Manager.
我将下面的内容放到web.xml里了.按书上写的内容运行web应用,关闭tomcat,再查看.结果发现进入了新的session,而不是和刚才一个session.
我查看了D:\Tomcat5\work\Catalina\localhost\mail1\ 目录,下面已经建立了mydir目录.但是里面在我运行tomcat-关闭tomcat-重新打开 的过程总没有任何文件生成.
我想知道大概是哪里出了问题
<Context path="/mail1" docBase="mail1" debug="0"
reloadable="true" >

<Manager className="org.apache.catalina.session.PersistentManager" >
debug=0;
saveOnRestart="true"
maxActiveSessions="-1"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="2"
<Store className="org.apache.catalina.session.FileStore" directory="mydir" />
</Manager>
</Context>
<Co
...全文
606 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingzhiyun 2007-04-08
  • 打赏
  • 举报
回复
这个问题经过在网上查询资料已经解决了

 Session持久化(2007-04-08)
Session持久化可以实现当tomcat重新启动后,当前IE使用的session仍然有效而不用重新登录,有两步需要做
 1.配置conf/server.xml
在server.xml的根路径或虚拟目录中增加一段,如虚拟目录调度所中:
<Context path="/dds" docBase="D:\01_XZY\98_供电局调度所\02_JSP\HRDGDZC\ROOT" 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="seskep"/>
</Manager>
</Context>
这样之后,普通的session对象(像字符串类的)就能实现持久化了,但如果session使用了对象,则必须实现对象类的可序列化
参数说明:saveOnRestart-服务器关闭时,是否将所有的session保存到文件中;
maxActiveSessions-可处于活动状态的session数;
minIdleSwap/maxIdleSwap-session处于不活动状态最短/长时间(s),sesson对象转移到File Store中;
maxIdleBackup-超过这一时间,将session备份。(-1表示没有限制)
directory="seskep" 会在tomcat的work目录下建立一个目录,用来存储session,这里建立的目录是
D:\JAVA\TOMCAT4\work\Standalone\localhost\dds\seskep

 2.类的序列化
如果session中存储了类xzy登录属性的实例,则类xzy登录属性必须能够序列化,才能实现session持久化
实现implements java.io.Serializable接口就可以了
/**
* 用户登录后各种属性记录在本类的实例中
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: 山西泰森科技股份有限公司</p>
* @author 邢志云
* @version 1.0
*/
public class xzy登录属性 implements java.io.Serializable
{
public String UserName=null;
public String 姓名=null;
public String 单位=null;
public String 部门=null;
public String 职务=null;
public String 权限设置=null;
static final public long serialVersionUID=372938;
}
serialVersionUID这个东西估计每个类中写个不同的数值就可以了,好像是版本保持的.
经过测试IE登录后页面后,Session再重新启动,刷新IE页面的时候session对象中的值能够像重启前一样的读出来.

xingzhiyun 2007-04-08
  • 打赏
  • 举报
回复
这个问题我也想问,tomcat重启动后,目录下,确实有session文件,但在IE端的session确丢失了,好像是只保存了,而没有读入
dongdandan 2007-03-16
  • 打赏
  • 举报
回复
up
AHUA1001 2007-03-16
  • 打赏
  • 举报
回复
可以在web.xml配置文件里配置session的周期,但是建议还是把session的周期设置的小一些,否则服务器的压力太大了。
  • 打赏
  • 举报
回复
好好看看SESSION的几种生命周期
chrisli1983 2007-03-15
  • 打赏
  • 举报
回复
session本来就不是用来持久化的啦
dongdandan 2007-03-15
  • 打赏
  • 举报
回复
session持久化是说当服务器重启 或是内存总的session过多,而有的session超过一定时间不活跃就把它们保存到文件或数据库中.当重启之后或是需要激活的时候再调入内存.
如果我对这理解有问题,希望能得到更详细的解答,谢谢
journay 2007-03-15
  • 打赏
  • 举报
回复
ie关闭session失效
session过期失效,可设置失效时间

81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧