当前位置: 代码迷 >> PB >> 限制同一账户与此同时多次登录系统
  详细解决方案

限制同一账户与此同时多次登录系统

热度:46   发布时间:2016-04-29 07:07:58.0
限制同一账户同时多次登录系统
    在实际应用中发现,有些用户为了方便,用自己的账户同时登录ERP系统,打开几个相同的界面,在操作数据保存时大意,往往造成数据错误。
    为防止类似错误发生,我想限制每个账户,同一时间内,只能登录一次ERP系统,刚开始我的想法很简单,就是直接做个表,在登录时候保存该用户的状态,退出后修改状态。
     但发现用户非法关闭系统时,系统无法自行修改用户的状态,造成用户第二登录时无法登录。我想应该从用户登录系统后的数据库连接进行判断并修改、保存用户的登录状态,但没有形成思路,请教各位高手,有何良策?
------解决方案--------------------
那人为因素恐怕不好控制吧,你要是直接按主机上开关按钮关机,程序是控制不了的,呵呵 ~
------解决方案--------------------
方法应该就是把用户登录状态记录在数据库中来判断,主要是异常关闭是没办法判断的,不管你用什么方法,都不能判断异常关闭的情况。对于这种不确定因素导致的问题,我能想到的就只有做一个类似杀毒软件那样的程序,监控ERP系统的运行状况,一旦发现异常关闭就清除登录用户的状态信息。
------解决方案--------------------
如果是mssql的话可以这样处理:
在账户表中增加一个smallint列spid和一个datetime列login_time,用来保存SQL事务的@@SPID 和sysprocess中的login_time,
账户登录时进行spid和login_time的校验:
int li
select count(1) into :li from t_账户 
where exists(select 1 from master.dbo.sysprocesses 
     where spid = t_账户.spid and login_time = t_账户.login_time);
if li > 0 then //已经登录了
    messagebox("提示","您已经登录,不能再次登录!")
    return
end if
//可以登录则登录并更新spid和login_time
update a set a.spid = @@spid, a.login_time = b.login_time
  from t_账户 a, master.dbo.sysprocesses b 
  where b.spid = @@spid and a.user_id = :user_id;
...


退出程序时,可以清空spid,也可以不清空,没什么影响
------解决方案--------------------
以前讨论过,可以考虑在登录时,以用户名称来建立全局临时表。
若建立临时表失败,表明该用户已经登录,若建立成功,表明该用户第一次登录。
当用户异常离线时, 系统会自动删除相应的临时表。
------解决方案--------------------
4楼说的对 以前确实讨论过 但貌似没结果 

而且这中的关键 也是控制 异常退出的情况 ,相信你已经感觉到了

我以前也遇到这个问题 

但我的是单机版的 就用了一个简单的方法——同一个程序 只能开一个 给禁用多开


------解决方案--------------------
以前的帖子在这里
http://topic.csdn.net/u/20090924/11/1404CEAB-FED6-4C35-9F09-ED55C0F5435E.html
------解决方案--------------------
还有这里:数据库为oracle的
http://topic.csdn.net/u/20101118/00/5E9C1F63-255C-46F1-A236-DCFE83CEC537.html#r_69974659

sql的用spid, login_time (sysprocess)完全可以搞定。

------解决方案--------------------
引用:
还有这里:数据库为oracle的
http://topic.csdn.net/u/20101118/00/5E9C1F63-255C-46F1-A236-DCFE83CEC537.html#r_69974659

sql的用spid, login_time (sysprocess)完全可以搞定。


这个最实用  我们也是用这个的
------解决方案--------------------
老早就用4楼的方法实现了。
------解决方案--------------------
顶下,一般用四楼的吧,通用性较好
------解决方案--------------------
楼主好像不是这个意思 吧。

你的意思是有的人在同一台机子上 打开多次 , 只要控制系统启动后不能再启动就可以了 ,看 
http://topic.csdn.net/t/20020717/11/880560.html