登录的时候会在[用户表]中记录计算机名、进程号(任务管理器中的进程号)、在线状态,退出再注销。问题是非正常退出就无法注销。
我就想,登录的时候能否判断是非正常退出导致无法注销的话就直接允许登录,如果正常在线的话就拒绝。
那用什么办法呢?dbo.sysprocesses中记录了连接计算机名、进程号,能不能利用它和[用户表]的计算机名、进程号来做比较呢?
謝謝!
我就想,登录的时候能否判断是非正常退出导致无法注销的话就直接允许登录,如果正常在线的话就拒绝。
那用什么办法呢?dbo.sysprocesses中记录了连接计算机名、进程号,能不能利用它和[用户表]的计算机名、进程号来做比较呢?
謝謝!
try
{
Application.Run(Frmconnectservers);
}
catch(Exception err)
{
//异常退出 开始注销当前座席
}
机房有UPS,服务器断电基本不会发生,但是如果客户机断电,没法记录关闭时间,所以还用另一个判断,就是
判断登陆IP……
如果可以还可以记录实际地址(MAC地址),这样只要不是换网卡,就不会出现问题
就保留IP,直到该用户下一次登陆系统的时候,如果IP地址是原来的IP,就把这次登陆的
时间补到上次的退出时间,如果是该用户另一个IP登陆系统,就把上一次用户登陆的,
并且没有退出时间的那一条记录设成删除值(BIT字段,或者直接删除),这次重新开始记录
,这时如果该用户如果再用原IP登陆时(重复登陆),就查该用户是否存在未退出的时间未删除的记
录(不管IP)只要有,就代表已经登陆(换IP了,也是登陆了,已经记录下了登陆时间)。
除非他换IP的那个记录有了离开时间,他才可以再次登陆,我就是这么解决的,不是很好
你可以参考的看一下,希望对你有帮助。
如果是同一台電腦登錄兩次,就用 進程 來判斷正在運行嗎?
System.Diagnostics.Process.GetProcessById(int processId,string machineName);//但這個方法要用電腦名做
參數謝謝啦,我再查查怎麼判斷某個程序正在運行
可以这样判断。
我上面的方法比较笨,需要判断的比较多,再碰到这种情况下,还需要判断
最近一次该用户操作时间,来防止其他IP登陆,或者本机重复登陆来顶当前用户
所以我的每一个操作里都加入了日志,记录用户ID,使用该功能时间,IP等信息
如果登录的没有离开时间,最后一次操作与这次登陆的时间相差超过6小时,
就算可以登陆,所以不是很好……
特別感謝wanshichen!
如果确实是死机,没超过6小时就想使用,就只能联系管理员,或者在SQL后台直接填离开时间,解锁。
如果是IP相同,就参考启动时间是否一样,就可以解决本机重复登陆的问题,(希望不会有人再另一台机器上输入自己的IP)
如果IP不同,再进行一下类似我上面的判断,应该可以解决。