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

请教如何禁止同一用户名称在同一时间登陆系统的问题
请教各位大虾问题;
我现在在做一个jsp的web应用,后台是用oracle数据库;在前台主页上有个登陆窗口提供用户登陆。用户登陆完成后将用户名称等信息添加到session中去,
现在我想做到当用户登陆系统但没有退出系统时,其他人不能用该用户再次登陆,直到该用户退出后,其他人用该用户才能登陆到该系统中,请问如何实现


------解决方案--------------------
把登陆方法做成线程同步的
------解决方案--------------------
线程-S
lobin--> T---> login out F
VIEW--> DB--> SESSION--> LOCK
------解决方案--------------------
用一个字段做标记
------解决方案--------------------
用数据库表记录用户登录、退出信息,根据这个表进行判断,并定时扫描这个表找出长时间未操作的用户。
------解决方案--------------------
要定时,那就做一个session侦听吧,session结束,就做一些事情,不知道服务器上有没有办法获得所有的session?如果可以
------解决方案--------------------
等待高手过来回答

------解决方案--------------------
用户登录后,把信息保存在一张表里面。

然后再写一个类似session监听一样的东西,主要解决sessiontimeout
class SELFListener implements HttpSessionBindingListener {
// 实现这个方法
public void valueUnbound(HttpSessionBindingEvent event) {
。。。。。。。。。。。。。。
// 主要来操作db
}
}
至于正常的logout
那就简单了,就不多说了吧
------解决方案--------------------
我推荐一种方法。
思路:把用户登陆信息存储在数据库中。根据用户登陆时间,最新活动时间,Session的有效时长及来判断用户的当前状态。如果用户主动点击页面上的 "退出 "按钮,则把登陆信息从库中删掉。如果不是主动退出,则将最新活动时间与当前时间对比,超过session的有效时长,表明session失效,否则有效。
方法:建一个自定义的BaseAction类,继承自Action.这个BaseAction的功能就是当执行execute时,将最新用户活动时间更新为当前时间。其他所有用到的action(除了login的action)都从这个BaseAction继承过来,这样,只要用户访问了某个action,他的访问时间都将被更新到库中。
用户登陆时,loginAction按照上述思路判断用户名是否已经登陆并处于有效状态。没有登陆或登陆了但处于无效状态,就允许继续登陆,否则拒绝登陆。
------解决方案--------------------
增加字段,记录用户状态,登陆了的用户就不允许再登陆呗
------解决方案--------------------
单例模式 试试