最近在做一個系統,客戶報出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;
}
public static boolean isOnline(HttpSession session) {
boolean flag = true;
if (hUserName.containsKey(session.getId())) {
flag = true;
} else {
flag = false;
}
return flag;
}
}