当前位置: 代码迷 >> Java Web开发 >> 每台电脑上只能登录一个用户,该怎么解决
  详细解决方案

每台电脑上只能登录一个用户,该怎么解决

热度:178   发布时间:2016-04-17 10:41:35.0
每台电脑上只能登录一个用户
系统中要求每台机器上只能登录一用户,当新用户登录时,前一个用户就会自动被注销,大家有什么好办法没?
如果用session控制,在ie6下是没有用的,两个ie6窗口的是不同的session

------解决方案--------------------
用cookies吧
------解决方案--------------------
需要用到sessionlistener
------解决方案--------------------
ls正解,用cookie
------解决方案--------------------
application 可以判断所有用户!!!
------解决方案--------------------
Java code
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()));        }    }
------解决方案--------------------
Java code
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;    }    }
  相关解决方案