我刚做了一个用jsp/servlet的小型系统,领导要求一定实现用户不能重复登录(不管是同一台电脑还是不同的电脑)?在网上搜了一上午,也没有找到能实现的方案,请各位高手一定要帮帮小弟啊!请给个实现方案(最好有实现的具体方法最好,呵呵)!再次拜谢各位!
谢谢谢谢谢谢(本人分值不够高啊,否则全给啊!)
谢谢谢谢谢谢(本人分值不够高啊,否则全给啊!)
解决方案 »
- 图片轮播
- 关于在jsp页面上输出xml格式文字出现的错误
- 请教SSH+DWR整合后如何实现Ajax自动补全(类似百度的搜索功能)
- Mysql插入后无法及时刷新
- [帮忙]weblogic9下java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuild
- 我对session还是不太理解!假设执行了一个1.jsp,系统会生成一个session,那么再执行同一个目录下的2.jsp,还会再生成一个吗
- session 的时效
- jboss里放在WEB-INF/classes里面的bean怎么调用放在deploy里面的jar文件的EJB?
- 怎么实现几分钟后重定向到其他页面?
- 关于新浪SAE上传war包限制50M
- MyEclipse+Tomcat环境下Java调用DLL问题
- 如何用Java实现图片上传?
我以前做的方法是,把登录用户记录起来,如果再次登陆,就把以前的那个登录用户踢出去。
======================================
说实在的是不太可能的,除非用户规规矩矩的点击你的注销连接,不知道csdn怎么做的,呵呵
------------------------
感觉这样就OK了吧,判断session的值,如果存在的话,必须T出另外一个这个才能登录,
好像以前玩的那种网页江湖聊天室一样,意外退出的话,要把以前的T掉的。
如果ID相同, 则问他是不是把前一个用户踢掉.
至于session失效与用户登录状态的衔接,大可用查询数据库的方法,当然数据库要有个字段例如IS_SESSION_ACTIVE,来表示某个用户的session是否有效。如果有效,就不让他登录。
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>
你可以试试.
可以满足楼主的需求.互连网任意机器都可以限制.我们系统测试没有问题楼主.既然不需要了就结帖吧!
2.用户登陆的时候先查看是否在这张表里有他的记录,如果有就是重复登陆,設置原來sessionID超時,更新表的sessionID,最后登錄时间等内容,如果没有就在数据库表中添加這種做法是
登录后把当前登录的用户踢出去以前别人问的可以参考一下
http://community.csdn.net/Expert/topic/5448/5448746.xml?temp=.8119928
不知道高手能给我解惑下下面几个问题不?
1.放application中,结束浏览器进程或者断电如何清除,不要说什么监控session过期,我希望实时
2.服务器集群时放application中有意义?
3.数据库用一个字段来标识登录状态,同上面一样结束浏览器进程或者断电何时更改其数据库状态,不要说什么监控session过期,我希望实时