首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

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

2012-03-21 
每台电脑上只能登录一个用户系统中要求每台机器上只能登录一用户,当新用户登录时,前一个用户就会自动被注

每台电脑上只能登录一个用户
系统中要求每台机器上只能登录一用户,当新用户登录时,前一个用户就会自动被注销,大家有什么好办法没?
如果用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;    }    } 


[解决办法]

探讨
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;
i……

[解决办法]
如果是要保证同一台电脑不能同时登录2个不同的用户,那光用web是不可能实现的。
[解决办法]
如果能保证每个机器的IP都是不一样的(就是不会使用代理)可以记录用户和IP
[解决办法]
用cookie
[解决办法]
其实如果可以的话,写个ocx或者applet获取网卡的mac是最好的。
[解决办法]
sessionlistener ++
[解决办法]
探讨
如果能保证每个机器的IP都是不一样的(就是不会使用代理)可以记录用户和IP

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

热点排行