 |
| JAVA解决用户同时在线问题-解决方案用户池 |
|
yubaojian0616 原创 更新:2006-11-01 13:58:17 版本: 1.0
|
|
在处理WEB时,有时需求可能是不能让同一个用户在不同的地方登录,本人针对这个问题进行处理,一般网上用的方法一般都是通过什么数据库阿,要么就是什么JS,第一个思路就是现在大多人认为用数据,方法就是在数据库用户表比如Users表中添加一个字段 bit 当有人用这个用户登录的时候就把它变成1, 本人认为这个方法不好,原因有两个:第一 数据库更新问题,需要很大的性能 而且如果大量用户这样做,后果不堪设想。第二:服务器无法判断设么时候用户推出登录,如果用JS 无法解决断网问题,还有就是如果一个用户在同一个计算机上登录两次那么那么第二次将不能登录,这倒可以理解,如果一个用户关闭浏览器 服务器不知道,这个用户还向登录,后果就是登不上去了,所以本人的方法就是解决这些问题 解决方案: 思想:就是用类似QQ的方法,如果一个用户再次登录,退出第一个登录的用户,保留第二个 存储:利用用户池java.util.Map作为用户池容器,里面放着用户标示和sessionId,这个容器放到application对象中介可以; 原理:当用户登录时直接put进去就可以了,如果这个对象存在就会被更新 其他:编写listener用HttpSessionAttributeListener地实现 处理session属性的removed在removed的时候清楚这个用户在对象池中的状态 检查:编写一个用户Filter来检查请求的sessionId和用户池是否匹配就可以了如果不匹配清楚这个session中的用户对象 迫使下线
总结:这个市我们现在用的处理方法希望对大家有所帮助,有什么问题留言或联系我yubaojian0616@163.com
|
|
|
评论人:lxh_ming
|
发表时间: Mon Nov 06 09:25:50 CST 2006
|
|
如果用Ctrl + N,你的这个方案就没法子了
|
|
|
评论人:yubaojian0616
|
发表时间: Mon Nov 06 11:30:08 CST 2006
|
|
我刚才看了一下 ctrl+n 没有问题,当前用户没有被迫下线,新打开的窗口也可以正常操作 两个sessionId应该是一个 如果还怀疑你可以自己试验一下,由于我们这个市项目需要所以现在我也没有源代码给大家 ,等过一段时间我们项目完成 我在把这个源代码给大家
|
|
|
评论人:mrou2001
|
发表时间: Thu Dec 07 14:30:00 CST 2006
|
|
加油啊,支持[java]
|
|
|
|
|
 |