需求:
java应用系统中不允许同一用户同时多人登录(异地同时登录);
1.判断出同一用户已经在使用,不让其登录并给出提示信息,
2.后登录者为确保可以登录,必须先注销掉正在使用的用户。
现状:采用实现HttpSessionBindingListener 完成了监听,1问题得到解决。
问题:问题2一直找不到好的办法,请求帮助
或者给点建议也可,怎么才能从后台中获取指定的HttpSession?

解决方案 »

  1.   

    也可以写定时器~
    像你这样
    现状:采用实现HttpSessionBindingListener 完成了监听,1问题得到解决。 
    定时扫描~~
     把没在的改过来·~~~[笨办法]
     
      

  2.   

    在用数据库中记录用户状态是一个办法
    一:1.用户登录 --2.去读数据库判断是否在线 -- 3.不在线 将数据库状态置为在线 -- 4.正常退出 -- 5.数据库状态置为注销。
    二:1.用户登录 --2.去读数据库判断是否在线 -- 3.在线 将数据库状态置为在线 -- 4.返回信息 提示可注销正在使用的用户 -- 5.修改数据库 将在线改为注销 -- 流程一。
    特例:非法退出。
    个人感觉操作数据库不太好。
    现在问题的难点是 我怎么能通过HttpSession 的唯一标识 比方 Sessionid获得正在使用者的HttpSession 这个样子就好办了。
    考虑到大用户量的话遍历全部的HttpSession 来对比Sessionid 是否又有性能问题。
    还望大家继续讨论以便找到更好的解决方案!!
      

  3.   

    可以保存需要注销用户ID和新登录的sessionid,同样在HttpSessionBindingListener判断,如果用户的sessionid和新登录的sessionid对不上就终止这个session,还要考虑session超时后缓存的清理问题
      

  4.   

    这个问题是很难解决,楼主可以看一看我以前发的关于非法退出的贴子:
    http://topic.csdn.net/u/20090617/00/c6b186fc-f458-4507-8b04-dd493c64ff18.html?seed=1824722459&r=58912289#r_58912289
      

  5.   

      web应用本身就请求-响应模式,它不是实时的
         我们可以做的就是    如果用户在多长时间之内没有请求     就视为下线   然后修改数据库的用户状态
    163的邮箱就是这么做的..个人意见!
      

  6.   

    监听session的建立 与销毁,建立时 数据库改为登录,session销毁时 修改数据库为注销,问题:用户非正常下线时,要等session 过期自动销毁时 才能登陆
      

  7.   

    监听session的建立 与销毁,建立时 数据库改为登录,session销毁时 修改数据库为注销,问题:用户非正常下线时,要等session 过期自动销毁时 才能登陆a
    这办法可行
      

  8.   

    List allUser=(ArrayList)application.getAttribute("allUser");
       //查看是否设置了application如果没有则设置新的
       if(allUser==null){
       allUser=new ArrayList();
       allUser.add(user);
       application.setAttribute("allUser",allUser);
       session.setAttribute("loginuser",user);
       out.println("<script>window.location.href='../chat/mess.jsp';</script>");
       }else{
       //判断application中是否存在该用户
       boolean nohave=true; //初始化用户是否登陆状态为true
       //遍历list查看该用户是否登陆
       for(int i=0;i<allUser.size();i++){
       User hUser=(User)allUser.get(i);
       //如果该用户已经登陆
       if(user.getUserName().equals(hUser.getUserName())){
       nohave=false;
       out.println("<script>alert('该用户已经登陆了');window.location.href='../chat/login.jsp';</script>");
       }
       }
       //用户没有登陆则让用户登陆并添加到list中
       if(nohave){
       allUser.add(user);
       session.setAttribute("loginuser",user);
       out.println("<script>window.location.href='../chat/mess.jsp';</script>");
       }
      

  9.   

    to fly2808
    在得知“该用户已经登陆了”的情况下,踢掉已经登录的用户,继续登录,怎么实现?还有非法退出如何处理的?