日期:2014-05-18  浏览次数:20638 次

jsp中怎么实现同一个帐户不能同时登陆一个系统
jsp怎么实现同一个帐户不能同时登陆系统   ,请帮帮忙,谢谢

------解决方案--------------------
csdn里总有讨论的这个问题,都是说的挺简单的,但是有太多都不适用于关闭Ie退出或者是因为死机等其他非正常退出的情况!你在CSDN里搜索下吧,有人以前提供过用session做监听的,挺好的!
------解决方案--------------------
一个帐户不能同时登陆系统这是商业软件所必须有的/
实现的方法当然也有很多;

2楼的建议可用,但是实际的商业软件中是不推荐的,原因显而易见,当浏览器非法关闭或者停电死机等情况都要考虑,这种情况的话,状态位不可能复位,所以这种方法不推荐;

4楼的1方法可用,但也有不好的地方,那就是所显示的信息不是实时的,实现实时更新的算法也是非常复杂的,要么就是访问数据库过于频繁;
2方法极不赞成,如果系统有上万的用户会怎么办,服务器能跑起来吗?

5楼的建议可以值得楼主去考虑,至于实现的思路是这样的;先写一个存储用户信息的JAVA Bean 当用户登陆成功以后,NEW 一个BEAN 将所有信息全部set进去,并和SESSIONID 进行关联;当下一个用户进行登陆时,就可以用SESSION中的用户ID去判断

实现的方法有好多,也可以将用户的信息和IP进行绑定等等

------解决方案--------------------
把每个用户的sessionid放在application里面的做法比较好,不用经常去查数据库。
不过无论哪个方法,都无法判断意外情况,比如上面所说直接关闭IE,断电等等,session监听也只是可以监听到session销毁的动作,也就是说,除非用户手动销毁,或者等session失效,否则这个session会一直驻留在内存的。
相对比较好的办法是在服务器端用上面几楼的办法保存sessionid,然后在客户端用cookie记录,两项比较得出正确判断,不过如此还是有问题,就是如果用户禁用cookie就完了。如此就可以在服务器端再弄一个东西来记录这个用户的信息,比如本机的ip,或者mac地址,可以记录在一个数据表里面,也可以用一个文件的形式记录。这样就可以判断这个用户两次登录是否在同一地点,从而避免重复登录。
另外还有一个做法,就是保证单一用户登录,就是如果有别人用这个用户登录,那么就不管三七二十一,将现有用户注销,使最后一个登录的人成为当前用户,类似于网络游戏的顶号。