日期:2014-05-18  浏览次数:20647 次

请高人指点一种实现防止“重复登录”的问题,谢谢!
我刚做了一个用jsp/servlet的小型系统,领导要求一定实现用户不能重复登录(不管是同一台电脑还是不同的电脑)?在网上搜了一上午,也没有找到能实现的方案,请各位高手一定要帮帮小弟啊!请给个实现方案(最好有实现的具体方法最好,呵呵)!再次拜谢各位!
谢谢谢谢谢谢(本人分值不够高啊,否则全给啊!)

------解决方案--------------------
我们做的一个防止同一帐户同时登陆系统的限制:

import javax.servlet.http.*;
import java.util.*;
import javax.servlet.http.HttpSession;
import *.AccountModel;

public class SessionListener implements HttpSessionListener{
private static java.util.Hashtable hUserName = new Hashtable();
public void sessionCreated(HttpSessionEvent se){
System.out.println( "Session Created. ");
}

public void sessionDestroyed(HttpSessionEvent se){
hUserName.remove(se.getSession());
System.out.println( "Session Destroyed. ");
}
/*
* isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法
* @param sUserName String-登录的用户名称
* @return boolean-该用户是否已经登录过的标志
*/
public synchronized static boolean isLogined(HttpSession session,String sUserName){
boolean flag = false;
if(hUserName.containsKey(sUserName)){
flag = true;
HttpSession vsession = (HttpSession)hUserName.get(sUserName);
try {
vsession.invalidate();
}
catch (Exception ex){}
}
else{
flag = false;
}
hUserName.remove(sUserName);
hUserName.put(sUserName,session);
return flag;
}

public synchronized static boolean isOnline(HttpSession session){
boolean flag = true;

AccountModel user = (AccountModel) session.getAttribute( "USER ");
HttpSession vsession = (HttpSession) hUserName.get(user.getMemberId());
if (session.getId().equals(vsession.getId())) {
flag = true;
} else {
flag = false;
}
return flag;

}
}

通过在login的servlet或action中的登陆方法中调用该HttpSessionListener.isLogined()方法判断是否已经登陆了,如果已经登陆,则不让登陆(踢第一个还是后面的,自己决定).

在web.xml中加入:
<listener>
<listener-class> *.SessionListener </listener-class>
</listener>


你可以试试.
------解决方案--------------------
1.数据库里面放一张表(onlineUser)记录用户id,用户名,最后登錄时间,sessionID(重要)
2.用户登陆的时候先查看是否在这张表里有他的记录,如果有就是重复登陆,設置原來sessionID超時,更新表的sessionID,最后登錄时间等内容,如果没有就在数据库表中添加

這種做法是
登录后把当前登录的用户踢出去

以前别人问的可以参考一下
http://community.csdn.net/Expert/topic/5448/5448746.xml?temp=.8119928