最近在做一個系統,客戶報出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;
}
}