日期:2014-05-19  浏览次数:20708 次

关于Struts2的登陆、退出以及重复登陆的问题。
用户登陆的时候,将用户信息存入Session中

HttpSession session = ServletActionContext.getRequest().getSession();

session.setAttribute("username", Muser.getUsername().toString()
.trim());
session.setAttribute("realname", Muser.getName().toString()
.trim());
session.setAttribute("id", Muser.getId().toString().trim());
session.setAttribute("mobilePhone", Muser.getMobialphone()
.toString().trim());



用户退出的时候:remove这些字段

public String logout() throws Exception {
Map session = ActionContext.getContext().getSession();
try {
session.remove("username");

session.remove("realname");
session.remove("id");


System.out.println("退出成功!");
return SUCCESS;
} catch (Exception e) {
return INPUT;
}

}


①但是,我发现写的那个SessionListener,总是提示帐号已登陆,请重复登陆,这样再登陆一次就没问题了,貌似就是退出的时候那执行的有问题。

②如果我修改了session中的值,为什么页面不能及时的反馈,以及判断呢,而是要下次登陆才能及时的更新。
例如: realname 这个字段,登陆的时候,把这个字段存入了session,
然后用户登陆后,更改了这个字段,但是发现在session中的值并没有修改,
而是下次登陆之后才修改。这是因为这还是同一个session的原因吧?请问有好的解决办法没啊 ?
谢谢。


------解决方案--------------------
1.确定你jsp页面取session的时候是在session更新之后。不然就白忙活了。。。

2.response.flushBuffer();jsp里加上这个方法试试。
------解决方案--------------------
引用:
引用:1.确定你jsp页面取session的时候是在session更新之后。不然就白忙活了。。。

2.response.flushBuffer();jsp里加上这个方法试试。


登陆的时候,把值存入了session,
页面只是获取session的值,jsp取session咋能保证他取到更新后的sessin的值呢,

……


更新过当然要重新获取session才行了。就好像我整容前你认识我,但是整容之后,我肯定要向你自我介绍了你才知道是我啊。

你没有重新获取么。。。?
------解决方案--------------------
在sessionRemove方法下面调用一下invalidate()方法,来注销session。
------解决方案--------------------
引用:
引用:引用:
引用:引用:引用:1.确定你jsp页面取session的时候是在session更新之后。不然就白忙活了。。。

2.response.flushBuffer()……


光更新字段没用啊,session里还是原来那东西。
就好像我写信告诉你我整容了,但你还是只认识整容前的我一样。

必须要重新session.put(...)才行啊,多想想session的用法。