java限制用户重复登录,怎么防止用户重复登陆?

Java codepackage test;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionMapping;

public class sessionCheck

{

private static sessionCheck sessioncheck;

public sessionCheck(HttpServlet servlet)

{

}

public static sessionCheck getInstance(HttpServlet servlet)

{

if (sessioncheck==null)

{

sessioncheck=new sessionCheck(servlet);

}

return sessioncheck;

}

public void setSession(String userName,HttpServlet servlet,HttpSession session,ActionMapping mapping)

{

final ServletContext sc = servlet.getServletContext();//取得容器,容器中根据用户唯一标识userID存放session

System.out.println(sc);

System.out.println(session);

if (sc.getAttribute(userName) != null)

{

// 第二次登陆后第一次无效

((HttpSession) sc.getAttribute(userName)).invalidate();// 清除第一次登陆的session

System.out.println(session);

}

sc.setAttribute(userName, session);//放入当前最新session

mapping.findForward("sessionDestroy") ;

}

}

------解决方案--------------------

上面各位的想法都有看,

1.cooKie有可能不开的

2.把session放ServletContext会不会导致内存泄露啊,这个待验证

3.客户端一定不能靠ajax搞大量并发服务器承受不了

4.靠javascript监控页面关闭事件是不可靠的,遨游下默认就不好使

同一账号可以登录两次的方案:

我没有这方面需求所以也不太了解常规是如果干的,但是有一点你要清楚,就是msn是c/s程序他的工作方式和http协议是不同的,http是无状态的,客户端必须主动请求服务器才行,也就是说如果B提掉A,系统要提示A的话需要靠异步job不断的请求服务器,这样压力太大了.

下面我想出一个比较可行的方案:

A先上线B后上线,这时系统不要提示A已经被提掉了,而是在A再次访问其他页面的时候(这时候是要走过滤器的),过滤器判断出A已经被T了,这时候在提示A,也就是说让A触发这个被T的消息.

如何知道A已经失效用4楼的方法就可以了.

同一账号不可以登录两次的方案:

老实说我觉得除非客户端ajax并发否则没有太精准的办法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值