主题:如何实现相同用户不能同时登陆?
ghzhsimon
[专家分:0] 发布于 2005-10-24 16:22:00
我是用PB、SQL开发一个管理系统.
现在我要实现:一个用户名登陆后,不能使用相同的用户名登陆该管理系统.也就是说象QQ一样,相同的QQ号不能同时在线.该怎么办?
我本想在数据库用户表中设一个标记列,当用户点登陆按钮后,标记为1,然后用户点退出按钮时,标记为0.但是遇到个问题,就是如果登陆的用户如果不是正常退出程序(象非法关机),那么该用户就一直在线了.
回复列表 (共5个回复)
沙发
mykey [专家分:100] 发布于 2005-10-25 08:15:00
你可以按照一定时间段扫描阿
板凳
lihang7059 [专家分:140] 发布于 2005-10-25 08:50:00
定时扫描是一个办法,你也可以使用主界面带有用户标志位,一旦主窗口关闭,用户的状态自动转换为0,否则为一,这样也可以解决啊。
3 楼
ghzhsimon [专家分:0] 发布于 2005-10-25 10:23:00
估计不是,这似乎要用到三层开发。
在服务器端除了数据库外,还应该编一个检测客户端和连接数据库的软件。
当打开客户端软件,就发送信号到服务器,该软件接收到信号后,连接数据库。
通过该软件的编程就可以完成上述功能。
4 楼
ghzhsimon [专家分:0] 发布于 2005-10-25 10:27:00
我这是CS结构,如果是BS结构就简单了。
5 楼
lufeee [专家分:30] 发布于 2005-10-26 13:14:00
这个方法你看可以吗:
1 除了标志字段 再增加一个机器名的字段
2 登陆时
bz = 0 : bz = 1 ,host = 本机器名
bz = 1 : a host = 本机名 直接进入
b host <> 本机名
查master..sysprocesses 中是否有此机器名的进程,
如果有,则不能登入 ,没有 ,可以登陆, host = 本机名
或者提示哪台机器占用
备注:
sqlserver中 host_name() 函数 可以取到本机器名
select host_name() into :ls_host ........
master..sysprocesses 中 有hostname字段
虽然不能说肯定不会发生你说的情况,但是几率比你的要少很多
我来回复