系统中要求每台机器上只能登录一用户,当新用户登录时,前一个用户就会自动被注销,大家有什么好办法没?
如果用session控制,在ie6下是没有用的,两个ie6窗口的是不同的session

解决方案 »

  1.   

    application 可以判断所有用户!!!
      

  2.   

    cookie正解,请问sessionlistener如何操作?
      

  3.   


    package com.banner.servlet;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;import javax.servlet.ServletContext;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpSessionBindingEvent;
    import javax.servlet.http.HttpSessionBindingListener;public class OnlineUserBindingListener implements HttpSessionBindingListener {
      String username;
        public OnlineUserBindingListener(){
        }
        
        public OnlineUserBindingListener(String username){
            this.username=username;
        }
        public void valueBound(HttpSessionBindingEvent event) {
            HttpSession session = event.getSession();
            ServletContext application = session.getServletContext();
            // 把用户名放入在线列表
            List onlineUserList = (List) application.getAttribute("onlineUserList");
            // 第一次使用前,需要初始化
            if (onlineUserList == null) {
                onlineUserList = new ArrayList();
                
            }
            onlineUserList.add(this.username);
            application.setAttribute("onlineUserList", onlineUserList);
        }     public void valueUnbound(HttpSessionBindingEvent event) {
            HttpSession session = event.getSession();
            ServletContext application = session.getServletContext();         // 从在线列表中删除用户名
            List onlineUserList = (List) application.getAttribute("onlineUserList");
            onlineUserList.remove(this.username);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            System.out.println(this.username + "退出系统。");
            System.out.println("退出时间"+sdf.format(new Date()));
        }
        
    }登录就往  onlineUserList  添加用户ID,退出就在onlineUserList 里删除该用户ID。如果直接关闭网页,在session失效后onlineUserList 会自动删除用户ID。
      

  4.   


    public class OnlineListener implements HttpSessionListener {    private static HashMap  hUserName = new HashMap();//保存sessionID和username的映射
        
        @Override
        public void sessionCreated(HttpSessionEvent arg0) {
            
        }    @Override
        public void sessionDestroyed(HttpSessionEvent arg0) {
            hUserName.remove(event.getSession());
        }    /*
         * isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法 @param sUserName String-登录的用户名称
         * @return boolean-该用户是否已经登录过的标志
         */
        public static boolean isAlreadyEnter(HttpServletRequest request, String sUserName) {
            boolean flag = false;
            if (hUserName.containsValue(sUserName)) {// 如果该用户已经登录过,则使上次登录的用户掉线(依据使用户名是否在hUserName中)
                flag = true;
                // 遍历原来的hUserName,删除原用户名对应的sessionID(即删除原来的sessionID和username)
                Iterator iter = hUserName.entrySet().iterator();
                while (iter.hasNext()) {
                    Map.Entry entry = (Map.Entry) iter.next();
                    Object key = entry.getKey();
                    Object val = entry.getValue();
                    if (((String) val).equals(sUserName)) {
                        hUserName.remove(key);
                        try{
                            HttpSession session = (HttpSession)key;
                            session.invalidate();
                        }catch(Exception ex){
                            logger.error(ex.getMessage(), ex);
                        }
                        
                    }
                }
                hUserName.put(request.getSession(),sUserName);// 添加现在的sessionID和username
            } else {// 如果该用户没登录过,直接添加现在的sessionID和username
                flag = false;
                hUserName.put(request.getSession(),sUserName);
            }
            return flag;
        }
        
    }大概一个参考。
    在登录的时候调用 isAlreadyEnter静态方法。判断用户是否已经登录,如果登录过把它踢掉。如果没登录则写入map,用于下一次登录的判断。
      

  5.   

    如果是要保证同一台电脑不能同时登录2个不同的用户,那光用web是不可能实现的。
      

  6.   

    如果能保证每个机器的IP都是不一样的(就是不会使用代理)可以记录用户和IP
      

  7.   

    其实如果可以的话,写个ocx或者applet获取网卡的mac是最好的。
      

  8.   

    cookie在同一浏览器下可以,但不同浏览器就不行了啊
      

  9.   

    给楼主一个思路:
    1、写一个sessionlistener监听器,里面一个map保存所有用户的session。sessionCreated的时候往map里put当前session,sessionDestory的时候从map里remove当前session
    2、用户登陆时,把监听器里的map取出来,查询一下看有没有这个session,没有就put,有就不动。然后循环map里的所有session,逐个取出session中保存的用户信息,如果用户id跟当前登录的用户id相同,就把之前那个session里的用户信息清除(设置为null)