关于登录、退出信息得不到保存的问题:
登录程序:
public ActionForward searchLogin(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception
{
                  //三种不同会员
request.getSession().removeAttribute("individual");
request.getSession().removeAttribute("clinique");
request.getSession().removeAttribute("manufacturer");
String ro = request.getParameter("ro");
String username = request.getParameter("uname");
String password = request.getParameter("pw");
if ("1".equals(ro))
{
Manufacturer manufacturer = loginBiz.validateManufacturer(username,password);
if (null != manufacturer)
{
request.getSession().setAttribute("manufacturer", manufacturer);
try
{
manufacturer.setLastLoginTime(manufacturer.getNowLoginTime());
manufacturer.setNowLoginTime(org.tol.util.DateFormat.getDate());
//用户登录时更新其登录状态
manufacturer.setIsOnline("1");
userInfoBiz.upM_user(manufacturer);

catch (Exception e){}
request.setAttribute("ro", ro);
request.setAttribute("uname", username);
request.setAttribute("pw", password);

else
{
request.setAttribute("ro", 123);
request.setAttribute("uname", "1");
request.setAttribute("pw", "2");
}
}
if ("2".equals(ro))
{
Clinique clinique = loginBiz.validateClinique(username, password);
if (null != clinique)
{
request.getSession().setAttribute("clinique", clinique);
clinique.setLastLoginTime(clinique.getNowLoginTime());
clinique.setNowLoginTime(org.tol.util.DateFormat.getDate());
//用户登录时更新其登录状态
clinique.setIsOnline("1");
userInfoBiz.upC_user(clinique);
request.setAttribute("ro", ro);
request.setAttribute("uname", username);
request.setAttribute("pw", password);
} else
{
request.setAttribute("ro", 123);
request.setAttribute("uname", "1");
request.setAttribute("pw", "2");
}
}
if ("3".equals(ro))
{
Individual individual = loginBiz.validateIndividual(username,
password);
if (null != individual)
{
request.getSession().setAttribute("individual", individual);
individual.setLastLoginTime(individual.getNowLoginTime());
individual.setNowLoginTime(org.tol.util.DateFormat.getDate());
//用户登录时更新其登录状态
individual.setIsOnline("1");
userInfoBiz.upI_user(individual);
request.setAttribute("ro", ro);
request.setAttribute("uname", username);
request.setAttribute("pw", password);
} else
{
request.setAttribute("ro", 123);
request.setAttribute("uname", "1");
request.setAttribute("pw", "2");
}
}
return new ActionForward("/jsp/AjaxSearch.jsp");
}
退出:
public ActionForward clearSessionIndex(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response)
{
Individual individual = (Individual)request.getSession().getAttribute("individual");
Clinique clinique = (Clinique)request.getSession().getAttribute("clinique");
Manufacturer manufacturer = (Manufacturer)request.getSession().getAttribute("manufacturer");
if(individual != null)
{
//用户退出更新其登录状态
individual.setIsOnline("0");
this.userInfoBiz.upI_user(individual);
request.getSession().removeAttribute("individual");
}
if(clinique != null)
{
//用户退出更新其登录状态
clinique.setIsOnline("0");
this.userInfoBiz.upC_user(clinique);
request.getSession(true).removeAttribute("clinique");
}
if(manufacturer != null)
{
//用户退出更新其登录状态
manufacturer.setIsOnline("0");
this.userInfoBiz.upM_user(manufacturer);
request.getSession(true).removeAttribute("manufacturer");
}
return null;
}
退出时先执行(在执行上面的):
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="org.tol.model.*,org.tol.dao.*,java.util.*"%>
<%
Individual ind = (Individual) request.getSession().getAttribute("individual");
Clinique cli = (Clinique) request.getSession().getAttribute("clinique");
Manufacturer man = (Manufacturer) request.getSession().getAttribute("manufacturer");
if (null != ind)
{
List list = new ArrayList();
list = (List) application.getAttribute("findUser");
List aaa = new ArrayList();
if (null != list)
{
if (list.size() > 0)
{
for (int i = 0; i < list.size(); i++)
{
if ((ind.getI_username() + "3").equals((String) list.get(i)))
{
aaa.add((String) list.get(i));
}
}
list.removeAll(aaa);
application.setAttribute("findUser", list);
}
}
}
if (null != cli)
{
List list = new ArrayList();
list = (List) application.getAttribute("findUser");
List aaa = new ArrayList();
if (null != list)
{
if (list.size() > 0)
{
for (int i = 0; i < list.size(); i++)
{
if ((cli.getC_username() + "2")
.equals((String) list.get(i)))
{
aaa.add((String) list.get(i));
}
}
list.removeAll(aaa);
application.setAttribute("findUser", list);
}
}
}
if (null != man)
{
List list = new ArrayList();
list = (List) application.getAttribute("findUser");
List aaa = new ArrayList();
if (null != list)
{
if (list.size() > 0)
{
for (int i = 0; i < list.size(); i++)
{
if ((man.getM_username() + "1")
.equals((String) list.get(i)))
{
aaa.add((String) list.get(i));
}
}
list.removeAll(aaa);
System.out.println(list.size());
application.setAttribute("findUser", list);
}
}
}
%>
问题:比如:当修改用户信息后(如修改用户头像),马上退出的话,信息得不到保存,但修改时,数据库已经修改成功了,退出后:数据库记录又回到修改前的状态,我退出时,并没有写任何修改用户的方法。
      但当session 失效后,数据是得到保存的。
疑惑2: 
      在IE浏览器登录修改信息后,再打开FF浏览器,登录,然后退出,没有任何问题,信息依旧存在。
急啊......
大虾们....请教了......

解决方案 »

  1.   

    回1楼...修改信息后...没退出前数据库信息确实已经修改. 若退出:数据库信息回到修改前状态。Session过期数据库则不会发生改变. 我用的是mysql.
      

  2.   

    当修改用户信息后(如修改用户头像)---->这个action怎么写的?
    修改信息的service事物是怎么处理的?
      

  3.   

    回楼上的,没有用到事务!
    System.out.println("用户头像:"+manufacturer.getPhoto());//程序执行到这的时候可以打印出头像地址并且数据的photo自段也有值
    request.getSession().removeAttribute("manufacturer");//程序执行这句后,数据库的值就变空了真是太奇怪了.....数据库也没有开启事务管理机制。求解?
      

  4.   

    你的表的引擎是innodb还是myisam?
      

  5.   

    回8楼:是innodb,啊?这还跟表的引擎有关系啊?