最近在做一个系统,客户报出bug,用户在某系统登录后,在其他机子上也能再次登录,还能登录;解决此bug,用了网上常用的一段代码:
声明:下文代码网上比较常见,属于引用
问
public class OnLineUserListener implements HttpSessionListener {
private static HashMap hUserName = new HashMap();// 保存sessionID和username的映射
public void sessionCreated(HttpSessionEvent se) {
// TODO Auto-generated method stub
}
public void sessionDestroyed(HttpSessionEvent se) {
// TODO Auto-generated method stub
hUserName.remove(se.getSession().getId());
}
public static boolean isAlreadyEnter(HttpSession session, 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);
}
}
hUserName.put(session.getId(), sUserName);// 添加现在的sessionID和username
System.out.println("hUserName = " + hUserName);
} else {// 如果该用户没登录过,直接添加现在的sessionID和username
flag = false;
hUserName.put(session.getId(), sUserName);
System.out.println("hUserName = " + hUserName);
}
return flag;
}
/*
* isOnline-用于判断用户是否在线
*
* @param session HttpSession-登录的用户名称
*
* @return boolean-该用户是否在线的标志
*/
public static boolean isOnline(HttpSession session) {
boolean flag = true;
if (hUserName.containsKey(session.getId())) {
flag = true;
} else {
flag = false;
}
return flag;
}
}