最近一個項目中用jsp(SUN企業級應用的首選)實現用戶登錄,當然是使用session來保持。這個用implements HttpSessionBindingListener接口來實現,這個是我寫的簡要代碼。
public class OnLineUser implements HttpSessionBindingListener {
private NewUser newUser=null;
public OnLineUser() {
newUser=new NewUser();
}
public boolean existUser(String str)
{
return false;
}
public void valueBound(HttpSessionBindingEvent e) {
String tempName=e.getName();
//Integer m=new Integer(tempName);
newUser.setUserName(tempName);
try {
newUser.updateOnline();
}
catch (Exception ex) {
}
System.out.println("用戶"+tempName+"上限");
}
public void valueUnbound(HttpSessionBindingEvent e) {
String tempName=e.getName();
//Integer m=new Integer(tempName);
newUser.setUserName(tempName);
try {
newUser.updateUnline();
}
catch (Exception ex) {
}
System.out.println("用戶"+tempName+"下限");
}
}
在登錄處理的servlet中調用
OnLineUser onLineUser=new OnLineUser();
request.getSession(false).setAttribute(login_no,onLineUser);
其中login_no是變量是登錄名稱。同時要把request.getSession(false)值設為false,他有true和false兩個值,true為如果如果沒有相同的session則創建。如果有則覆蓋,false則沒有則創建有則不創建,我要用這個實現單點登錄所以用了false。這樣就可以監聽你創建的session了。如果session超時,則執行valueUnbound方法。創建session則執行valuebound方法。我在這裡是對人員的一個狀態字段進行更改。這樣當這個用戶在線的時候,另一個用戶在另外的機子上線時在登錄頁面我就可以進行判斷了。這方面的資料網上有很多,後來遇到問題就是當設置session超時時間為1分鐘時。用戶不正常退出可以一分鐘後可以正常改變用戶下線狀態,但是用戶如果1分鐘內電腦沒有操作也同時會吊線,我在網上找了很長時間,沒有這方面的資料。後來我用我的一個框架(我的程序用的是框架,我用的是底部框架)
javax.servlet.http.HttpSession session2 = request.getSession(false);
com.chinantn.oa.util.OASession oasession =
(com.chinantn.oa.util.OASession) session2.getAttribute("oasession");
這個是我的登錄頁面用的一個處理session的類。然後在這個頁面中加入
<meta http-equiv="refresh" content="30;URL=foot.jsp(SUN企業級應用的首選)">.做成自動刷新。
間隔時間小於session超時時間。主要目的是如果頁面在超時時間內沒有訪問的話用這個自動刷新訪問一下session這樣來解決問題。
因為我在網上找了好長時間沒有找到解決這個問題的文章所以,把我後來想的解決方法寫出來,希望對那些碰到這類問題的人有些幫助。如果有問題可以聯系我,[email protected]