在数据库中有一个字段是代表着用户的登录状态,当用户登录就会修改该状态为登录时的状态,在下线时修改为下线状态。
现在遇到的问题是 当用户 注销时 可以修改其上线状态,但当遇到 下面几种情况该怎么解决:
1. 用户直接关闭浏览器
2.用户死机
3.用户断网
在这三种情况下依然能够修改登录状态。

解决方案 »

  1.   

    这些情况不好搞,你要不停的往服务端发请求,以判断在线。为了这个问题,没必要这样。你可以把session的时效设小一点,或者用页面全用框架,判断页面关闭事件
      

  2.   

    把用户信息放入缓存,定时去check session当一定时间后没了,就操作数据库。不知道可行不。
      

  3.   

    你管用户是死了还是活的··只要session在就保持,不存在了就修改··
      

  4.   

    直接关闭浏览器时我倒是做过销毁他的session信息,改变状态,但是突然的死机和断网我没尝试过,不过觉得楼上说的定时销毁会话可行
      

  5.   

    按照实际情况不会让用户一直连着session,一般都是设置了timeout的。没什么动作,在一定时间内,销毁session改变注销状态。
      

  6.   

    看看竹子大哥的文章是否能有启发。。
    http://blog.csdn.net/java2000_net/article/details/6560509
      

  7.   

    按照实际情况不会让用户一直连着session,一般都是设置了timeout的。在一定时间内,销毁session改变注销状态。我看可行。
      

  8.   

    事实上这类问题,我们是通过cookie技术来实现的。session是服务器端的技术。所以,你只要登录是,新建一个cookie,并设置一个timeout,定时对他进行判断是否已经销毁,或者cookie中的值已经不存在,就说明客户已经登出。大多数购物网站都是采取的这一解决方案
      

  9.   

    我的想法是在用户表里放一列代表时间,用ajax 定时的向服务器发送请求(比如30秒)在服务器获得请求,并且得到获取服务器时间与用户表的时间对比小于或等于30秒 就代表其在线 并且将用户表时间修改为当前时间,就这样不停的在客户端请求。但不知其性能怎么样.
      

  10.   

    cookie是在客户段建立的吗,是不是说将登录的session放入到客户端的cookie中,定时的用ajax去判断。
      

  11.   

     (1)cookie技术其实是一种非常好用的客户端技术,但是它只可以存储少量数据(正好适用你的用户登录),因为用户是否登录只关心两个值:用户名和密码。
     (2)实际使用中,我们是这样用的,用户登入时,我们就给用户一个cookie,根据你给的特定格式存储为特定的cookie.然后,我们定时对cookie值进行匹对,如果存在就不改变,如果不存在我们再通过JSON传值给ACTION处理改变状态。至于循环判断倒是没必要通过JSON,这个完全在JSP页面就可以实现。关键代码如下:
    <%try{
    Cookie user = new Cookie("user",name+"-"+passward);
    user.setMaxAge(60);
    response.addCookie(user);
    Cookie[] cookies=request.getCookies();
    if(cookies!=null){
    for(int i=0;i<cookies.length;i++){
    if(cookies[i].getName().equals("user")){
    name=cookies[i].getValue().split("-")[0];
    passward=cookies[i].getValue().split("-")[1];
    request.setAttribute("name",name);
    request.setAttribute("pass",passward);
    }
    }
    }
    }catch(Exception e){
    e.printStackTrace();
    }%>
    言不能尽,尽则无趣,自己再研究一下,既然楼主懂JSON,那么这个问题应该没有什么问题了。