最近在做ssi的项目,发现一个问题,关于session覆盖的一个低级错误.
其实session是一定可以覆盖的.我在页面改变登陆人的状态后,居然页面没反应,但是数据库的字段的值已经改变了,那我看我的 session的问题了
Code
<script language="JavaScript">
function OnStatusChange(status)
{
window.open("/project/changeonlinestatus.action?onlinestatus="+status,"_blank","height=150px,width=400px,top=300px,left=350px");
}
</script>
<style type="text/css">
body {
background-image: url(../../images/loginbg.jpg);
}
</style></head>
<body style="margin-left:2px;">
<%
UserBean userBean = (UserBean) request.getSession().getAttribute(GlobalMessageRead.get("USER_KEY"));
String onlinestatus=request.getSession().getAttribute("onlinestatus").toString();
List list=(List)request.getSession().getAttribute("userlist");
List friendlist=(List)request.getSession().getAttribute("friendlist");
%>
<br/>
<font style="font-weight:bold; color:#0000FF; font-size:12px;">用户名称:</font>
<font style="font-weight:bold; color:#000000; font-size:12px;">
<%=userBean.getName()%> (<%=onlinestatus %>)</font>
<script language="JavaScript">
function OnStatusChange(status)
{
window.open("/project/changeonlinestatus.action?onlinestatus="+status,"_blank","height=150px,width=400px,top=300px,left=350px");
}
</script>
<style type="text/css">
body {
background-image: url(../../images/loginbg.jpg);
}
</style></head>
<body style="margin-left:2px;">
<%
UserBean userBean = (UserBean) request.getSession().getAttribute(GlobalMessageRead.get("USER_KEY"));
String onlinestatus=request.getSession().getAttribute("onlinestatus").toString();
List list=(List)request.getSession().getAttribute("userlist");
List friendlist=(List)request.getSession().getAttribute("friendlist");
%>
<br/>
<font style="font-weight:bold; color:#0000FF; font-size:12px;">用户名称:</font>
<font style="font-weight:bold; color:#000000; font-size:12px;">
<%=userBean.getName()%> (<%=onlinestatus %>)</font>
struts2的代码
Code
public String changeonlinestatus(){
int onlinestatus=Integer.parseInt(request.getParameter("onlinestatus").toString());
Map p=new HashMap();
UserBean userBean = (UserBean) request.getSession().getAttribute(GlobalMessageRead.get("USER_KEY"));
p.put("userid",userBean.getId());
p.put("onlinestatus",onlinestatus);
onlineService.changeOnlineStatus(p);
//更改个人状态
request.getSession().setAttribute("onlinestatus",StatusShow.show(onlinestatus));
return "success";
}
public String changeonlinestatus(){
int onlinestatus=Integer.parseInt(request.getParameter("onlinestatus").toString());
Map p=new HashMap();
UserBean userBean = (UserBean) request.getSession().getAttribute(GlobalMessageRead.get("USER_KEY"));
p.put("userid",userBean.getId());
p.put("onlinestatus",onlinestatus);
onlineService.changeOnlineStatus(p);
//更改个人状态
request.getSession().setAttribute("onlinestatus",StatusShow.show(onlinestatus));
return "success";
}
为什么页面没反应呢,但是我重新登陆就反应过来了,后来我发现是我的定时刷性时,页面重新请求的时候读取的是我把个人信息封装的类中的登陆状态,而这个状态是我第一次登陆的时候的
Code
public String userlist() {
Map p=new HashMap();
UserBean userBean = (UserBean) request.getSession().getAttribute(GlobalMessageRead.get("USER_KEY"));
p.put("userid",userBean.getId());
p.put("departid",userBean.getDepartId());
List list=onlineService.getDepartmentPerson(p);
List list2=onlineService.getOtherDepartPerson(p);
int onlinestatus=userBean.getOnlinestatus();
//个人状态获取
request.getSession().setAttribute("onlinestatus",StatusShow.show(onlinestatus));
//本部门好友列表
request.getSession().setAttribute("userlist",list);
//得到其他好友列表
request.getSession().setAttribute("friendlist",list2);
return "success";
}
public String userlist() {
Map p=new HashMap();
UserBean userBean = (UserBean) request.getSession().getAttribute(GlobalMessageRead.get("USER_KEY"));
p.put("userid",userBean.getId());
p.put("departid",userBean.getDepartId());
List list=onlineService.getDepartmentPerson(p);
List list2=onlineService.getOtherDepartPerson(p);
int onlinestatus=userBean.getOnlinestatus();
//个人状态获取
request.getSession().setAttribute("onlinestatus",StatusShow.show(onlinestatus));
//本部门好友列表
request.getSession().setAttribute("userlist",list);
//得到其他好友列表
request.getSession().setAttribute("friendlist",list2);
return "success";
}
虽然我每次把状态改变了,但是我的页面刷性读取的还是我第一次登陆时的信息 ,而且把session("onlinestatus")覆盖了,这样页面就无法显示现在个人的状态了.在这里加个判断就可以了
Code
public String userlist() {
Map p=new HashMap();
UserBean userBean = (UserBean) request.getSession().getAttribute(GlobalMessageRead.get("USER_KEY"));
p.put("userid",userBean.getId());
p.put("departid",userBean.getDepartId());
List list=onlineService.getDepartmentPerson(p);
List list2=onlineService.getOtherDepartPerson(p);
if(request.getSession().getAttribute("onlinestatus")==null){
int onlinestatus=userBean.getOnlinestatus();
//个人状态获取
request.getSession().setAttribute("onlinestatus",StatusShow.show(onlinestatus));
}
//本部门好友列表
request.getSession().setAttribute("userlist",list);
//得到其他好友列表
request.getSession().setAttribute("friendlist",list2);
return "success";
}
public String userlist() {
Map p=new HashMap();
UserBean userBean = (UserBean) request.getSession().getAttribute(GlobalMessageRead.get("USER_KEY"));
p.put("userid",userBean.getId());
p.put("departid",userBean.getDepartId());
List list=onlineService.getDepartmentPerson(p);
List list2=onlineService.getOtherDepartPerson(p);
if(request.getSession().getAttribute("onlinestatus")==null){
int onlinestatus=userBean.getOnlinestatus();
//个人状态获取
request.getSession().setAttribute("onlinestatus",StatusShow.show(onlinestatus));
}
//本部门好友列表
request.getSession().setAttribute("userlist",list);
//得到其他好友列表
request.getSession().setAttribute("friendlist",list2);
return "success";
}
这个问题我发了一点时间发现的,发现还是自己经验不足,好好总结!