Session内容丢失。请高手进来帮忙解决。

bruce_wang tongtech 项目经理  2004-10-09 10:20:49
问题发生场合:Servlet
CheckUser.java和Initializa.java两个文件都是Servlet

首先在CheckUser.java中代码大致如下:
protected void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

HttpSession session = request.getSession(true);

session.setAttribute("USERNM", resultNode.getAttributes().get("USR_USRNAM"));
session.setAttribute("USERCD", resultNode.getAttributes().get("USR_USRCOD"));
session.setAttribute("COMPANYNM",companyNM);
session.setAttribute("COMPANYCD",companyCD);
session.setAttribute("LEVELCD", resultNode.getAttributes().get("USR_LEVELCOD"));
session.setAttribute("LEVEL", resultNode.getAttributes().get("USR_LEVEL"));
session.setAttribute("USR_USRMIL", resultNode.getAttributes().get("USR_USRMIL"));
session.setAttribute("USR_STATE", result);
}

在Initializa.java中的内容如下:
protected void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

HttpSession session = request.getSession(true);

initNode.getAttributes().put("USERNM", session.getAttribute("USERNM"));
initNode.getAttributes().put("USERCD", session.getAttribute("USERCD"));
initNode.getAttributes().put("COMPANYNM", session.getAttribute("COMPANYNM"));
initNode.getAttributes().put("COMPANYCD", session.getAttribute("COMPANYCD"));

......

session.setAttribute("USR_STATE", usrState);
session.setAttribute("LEVELCD", levelCD);
session.setAttribute("LEVEL", levelDeal(levelCD));
}

CheckUser.java用来校验登陆用户的合法性,如果用户合法则进入到下一个处理,
在下一个处理中会调用Initializa.java。这个时候没有任何问题,Session的内
容都能正确的拿到。

CheckUser的View部分我们叫它Login。
Initialize的View部分我们叫它Menu。
这个系统的结构是Applet+Servlet+DB。

Menu是一个总控页面,所有的功能模块都必须经由Menu才能进入,问题产生自经由
功能模块返回Menu页面的时候,Menu页面产生了NullPointException。
经过测试,发现Session中的数据为Null。

但是,并不是每次都出现NullPointException,现在已知的出现该问题的情况是
进入任意一个功能模块后,完成相关操作,但不马上迁移到Menu页面,而是进行其他的
与该系统无关的操作,比如:进行Word字处理,Excel处理等其他操作后。
再回到该功能模块,点击按钮返回Menu时,可能会出现NullPointException。
给我的感觉就是在运行多个大量占用内存的软件后,就有可能产生NullPointException。
而这个时候的Session的内容都是Null。

希望大家能集思广益,帮我解决这个问题,这里先谢谢了。
...全文
387 点赞 收藏 20
写回复
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
晓可 2004-10-13
* * ************
* * * *
* * * *
* * * *
* * ************
* * *
* * *
* * *
******* *
回复
ccwg 2004-10-13
up
回复
fireredfox 2004-10-11
关注下。

BTW,楼上的是西工大的吧!呵呵
回复
nwpulipeng 2004-10-11
帮顶混分
回复
sunny518 2004-10-11
我碰到过丢失的情况,重新启动tomcat就解决,不知道是怎么回事!
回复
tempbaby 2004-10-11
可以把
HttpSession session = request.getSession(true);
改成
HttpSession session = request.getSession();
理由很简单,如果没有session,它会创建一个新的,不必明确的设为true值啊!
回复
sagittarius1979 2004-10-11
你打印出两个session的id看看是不是同一个session。
回复
sagittarius1979 2004-10-11
HttpSession session = request.getSession(true);
->
HttpSession session = request.getSession(false);

再试.
回复
bruce_wang 2004-10-11
up,问题没有解决,接着等。
回复
treeroot 2004-10-11
up
回复
HaberWang 2004-10-09
关键在于HttpSession session = request.getSession(true);
request.getSession()用true调用时,会得到一个新的session。
当你第一次调用时request.getSession(true),request中没有session则创建一个新的session
(先叫它session1),当你第二次调用request.getSession(true)并没有返回先前创建的session1,
而是由创建了一个新的session(session2),所以你总是的不到你设置到session(session1)里的值。第二次想使用先前创建的session1的时候应该调用request.getSession(false)。
回复
zhuxinbin 2004-10-09
是不是物理内存用光后,就把session的信息写到硬盘上而再没有读出来。
仅供参考。
回复
bruce_wang 2004-10-09
up
回复
bruce_wang 2004-10-09
抱歉关于NullPointException我没有说清楚,这个NullPointException是产生在Applet上的,
因为Session的内容为Null,所以Servlet传送了Null到Applet中,Applet中调用相关的变量时
产生了NullPointException。
回复
tomuno 2004-10-09
NullPointException
有可能是包含session.setAttribute()的class文件没有被调用
回复
bruce_wang 2004-10-09
我的问题还没有解决呢,不能吊下去。
回复
bruce_wang 2004-10-09
To bdsc:一般出现这种情况的时候都是客户端计算机的CPU比较忙碌的时候。有的时候30分钟就能出现这种问题,有的时候4~5个小时才出现。
回复
hjx615 2004-10-09
up
回复
bruce_wang 2004-10-09
To bdsc:刚开始我也以为是Session超时,设置为2个小时后,问题依旧。
另外我是用的Web Server是Tomcat 5.18。
请问除了超时以外,Session的内容会在什么情况下丢失?
回复
bdsc 2004-10-09
"其他的与该系统无关的操作"需要多长时间?可能session超时
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告