日期:2014-05-17  浏览次数:20735 次

session未超时失效,原因是从action请求返还JSP页面时session失效!
在JSP页面用session。getAttribute("name")判断当前用户是否为登录状态,当点击JSP页面跳转并没有问题,但是当执行Action操作之后,当返会JSP页面时session中的变量值就不存在了,这是为何,代码如下
第一种方式
Map session=ActionContext.getContext().getSession();
session.put("userName", tempUser.getName());

第二种方式
HttpSession session = ServletActionContext.getRequest().getSession();   
session.setAttribute("userName", abcd);
session.setMaxInactiveInterval(60*60);
这两种方式都没有用,当请求action返回后session中的变量值就不存在了,求解!
session jsp action java struts

------解决方案--------------------
出现这种问题最大可能是你的session.put("userName", tempUser.getName());的位置有问题,被多次请求时执行,而某次执行的时候tempUser.getName()又为空,session就清掉了。
------解决方案--------------------
改为HttpSession session = ServletActionContext.getRequest().getSession(false);   
------解决方案--------------------
你在session方法体中打印tempUser.getName(),如"System.out.println("session赋值:"tempUser.getName());",看看输出窗口,是否在其他操作的过程中再次给userName付过空值。
------解决方案--------------------
就是你的方法()
{
Map session=ActionContext.getContext().getSession();
session.put("userName", tempUser.getName());
System.out.println("session赋值:"tempUser.getName());
}
看是否有单独的"session赋值:"输出,就知道是否被空值盖掉了。
------解决方案--------------------
所以,你肯定是给session赋值的请求,被错误的调用了,然后把你的username用空值盖掉了,要确保你的action不会被在空值的情况下重复调用。
------解决方案--------------------
那你打印一下session的id吧,看看是否session被替换了。