重複登入問題最終解決方法

fsz521job發表於2005-12-19

在《關於J2ee的struts結構不能解決的幾個問題》一文中我們提到使用session解決使用者重複登入的問題,經過一段時間的考慮和測試終於有了一個解決辦法; 合理性不知道是不是可以,現在寫一下我的思路,供大家參考一下;

[@more@]

1:我們需要把當前登入使用者的所有session記錄下來,如何來作?我們可以定義一個CacheData 類來實現:

public class CacheData {
public CacheData() {
}

public static java.util.Hashtable USER_SESSION = new java.util.Hashtable();

//USER_SESSION 定義為static 型別的是為了在應用程式中使其只存在一個例項;(還有更好的辦法來實現,再次就不多說了!)
}

2:具體的思路是,使用者首先提交使用者名稱和密碼,如果登入不成功則退出,如果登入成功,則判斷是否已經登入;如果沒有登入則把session存在CacheData.USER_SESSION 中,並提示成功登入;如果判斷出已經登入,則取的已經登入的使用者的session並登出掉(即把第一個登入的使用者強制踢掉,^_^),具體程式碼:

// login successfully
request.getSession().setAttribute("user_info", user_info);
//判斷是否重複登入 start
Hashtable ht2 = CacheData.USER_SESSION;
if(CacheData.USER_SESSION==null){
ht2.put(user_name,request.getSession());
}
else
{
if(ht2.get(user_name)!=null){
//HttpSession sess = (HttpSession)application.getAttribute(sessionID);
//sess.setInvi...();
HttpSession ses = (HttpSession)ht2.get(user_name);
ht2.remove(user_name);
ses.invalidate();
System.out.print("登出成功!!");
}
ht2.put(user_name,request.getSession());
}
//判斷是否重複登入 end

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/300209/viewspace-811921/,如需轉載,請註明出處,否則將追究法律責任。

相關文章