怎么判断同名用户已经登陆,用struts2拦截器可以么?不太会只会判断是否登陆。给个例子最好。。
解决方案 »
- 关于JDBC中NULL值处理问题(高手进)
- 发布一个struts2应用,/WEB-INF/lib目录下突然多了几个jar文件
- 谁能提供点好的spring和hibernate的书吗
- 请教:为什么我的extable运行显示不了表格呢
- 配置一个简单的struts时出现如下问题...
- 求教jsp+sqlserver的问题
- 我想在网站上做个MSN推广的功能,有人能指点一下吗?
- 刚学java,用的是struts1.0,1.0里面怎么什么都是手写的呀,各位看看这是什么错误,怎么改呀
- 有关jsp和jBOSS的问题要指教各位!!!!
- TOMCAT启动错误问题,请教!
- 改变列表\菜单按钮的宽度
- 高手们常说的接口是什么意思?
2台电脑的话呢,就限制不了了吧。
……
在线用户表可以,所有登录成功的用户都存进数据库,每次登录都到表里面遍历查询,
用户登陆的时候,把用户的帐号当Key,把产生的sessionID当value保存到全局变量中servletContext.setAttribute(userid,session.getId());
然后配置过滤器(当每产生一次新的请求时,程序会先经过过滤器),在过滤器中对本次请求的sessionid进行判断(通过帐号获得保存的sesionid),看是否与全局变量中保存的sessionId一致,如果不一致,表明已经有用此帐户做新的一次登陆(每次登陆时会重新保存sessiondi,因为key(帐号)相同,所以value会被替换),那么上一用户将被强制退出(踢出)。
http://blog.csdn.net/java2000_net/article/details/6560509
Memcache mc = new Memcache();//创建Memcache对象
HtglHydainfo hy = (HtglHydainfo) this.qxService.findByHyName(htglHydainfo).get(0);
//获取当前会员信息对象
String key = hy.getRyid();//将会员ID作为键
//判断当前系统中有无以ID为键的数据,如果是null说明当前账号是唯一登陆地点,否则表示该账户已经登陆了
if (mc.getCache(key) == null) {//如果为null表示当前没有登陆
mc.setCache(key, ip, Constants.KEEP); // 记住登录状态
String yyid = hy.getYyid();
List yycount = this.qxService.findByIdYY(yyid);
if (yycount.size() > 0) {
YyYyinfo yy = (YyYyinfo) yycount.get(0);
request.getSession().setAttribute("yy", yy);
}
request.getSession().setAttribute("htglHydainfo",
hy);
return "QianTaiDenglu";
} else {
response.getWriter().println(
"<script>alert('该帐号已经登录!');location.replace('"
+ path + "/login1.jsp');</script>");
}
ServletActionContext.getServletContext().setAttribute("SD", userinfo.getUsername());然后每次登陆判断当前的sessionID和用户名的情况,虽然可以起到了无法重复登陆,但是关闭网页不注销,那么不等到session自己过期就一直无法登陆了!有什么办法可以解决么?
cookie还有我写的这个还是有BUG的,比如我用别的账号登陆一次,然后重复的账号又能登陆了,因为ServletActionContext.getServletContext().setAttribute("SID", session.getId());
又被重写了...看来单一靠这种方法还不行,如果写入数据库呢?相应的HQL我又不会写了HQL的单对象Update怎么写呢?能麻烦写一下吗?
如果是的话你google java 单态登陆。
如果没有找到,我说一下思路:
其实用session监听那个类就可以实现了。A登陆的时候,将这个session放到application中,并指定KEY为该用户名,当B登陆的时候,先取得改用户名在application中查找,如果有则让A的那个session失效,并将B的这个session替换A在application中得session的值,在页面中,使用AJAX定时检查session是否失效。大概就是这样,具体代码你上网查查吧。就搜单态登陆。
引用 12 楼 yanjinye 的回复:具体做法比较简单:1 登录时,生成一个唯一的标识,然后和用户名关联。 标识保存到session或者cookie里面,用于下次访问。2 下次访问时,判断标识与用户名关联的是否一样,如果不一样则判断重复登录了,本session自动注销。
http://blog.csdn.net/java2000_net/article/details/6560509
ServletActionContext.getServletContext().setAttribute("SD", userinfo.getUsername());但是假如A用户登陆中,B用户也同时登陆了,那么这个Attribute就保存为B用户的session了,那么第二个A用户就可以登陆了怎么样把sessionID写到表里呢?
http://blog.csdn.net/hongfeideng/article/details/7023865 去看看吧。