关于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里加上这个方法试试。
------解决方案--------------------
更新过当然要重新获取session才行了。就好像我整容前你认识我,但是整容之后,我肯定要向你自我介绍了你才知道是我啊。
你没有重新获取么。。。?
------解决方案--------------------在sessionRemove方法下面调用一下invalidate()方法,来注销session。
------解决方案--------------------
光更新字段没用啊,session里还是原来那东西。
就好像我写信告诉你我整容了,但你还是只认识整容前的我一样。
必须要重新session.put(...)才行啊,多想想session的用法。