java web用户不能重复登录

求一完整的实例·先谢谢各位大神了最好是踢掉前一次登录的用户的方法··... 求一完整的实例·先谢谢各位大神了
最好是踢掉前一次登录的用户的方法··
展开
 我来答
濮焮戎fO
推荐于2017-09-10 · TA获得超过371个赞
知道小有建树答主
回答量:402
采纳率:100%
帮助的人:486万
展开全部
1楼的方法是对的但实现起来会有很多问题,踢掉前一次登录反而最简单,如下代码:
1、添加两个监听器类:
public class MySessionAttributeListener implements HttpSessionAttributeListener {
public static Map<String, HttpSession> sessionMap=new ConcurrentHashMap<String, HttpSession>();

@Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
String name=(String)arg0.getValue();
if("name".equals(name)){//name属性保存用户登录信息,name=为唯一信息如用户名
if(sessionMap.containsKey(name)){//踢掉前一次登录
HttpSession session=sessionMap.remove(name);
session.invalidate();
}
sessionMap.put(name, arg0.getSession());
}
}
@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {}
@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {}
}
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent arg0) {}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
String name=(String)arg0.getSession().getAttribute("name");
if(name!=null && name.length()>0){//session失效时候移除记录
if(MySessionAttributeListener.sessionMap.containsKey(name))
MySessionAttributeListener.sessionMap.remove(name);
}
//else System.out.println("注销用户:未获取到登录用户属性");
}
}
2、web.xml加入监听
<listener>
<listener-class>你的包名.MySessionListener</listener-class>
</listener>
<listener>
<listener-class>你的包名.MySessionAttributeListener</listener-class>
</listener>

3、jsp或servlet中保存登录信息如:
request.getSession().setAttribute("name", "登录信息");
匿名用户
2013-08-05
展开全部
使用session+DB记录。登录时,记录下来,未登了前,不接受另一个登录。——当然要处理浏览器突然关闭的意外。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式