如何判断该帐号是否登陆? ( 积分: 28 )

  • 主题发起人 主题发起人 ddzhouqian
  • 开始时间 开始时间
D

ddzhouqian

Unregistered / Unconfirmed
GUEST, unregistred user!
C/S架构下,如何判断帐号已经登陆,如果该帐号已经登陆,那么将不允许其他机器通过该帐号登陆,请问各位如何解决该问题?用Com吗?
多谢各位了!不好意思只有这么多分了.
 
C/S架构下,如何判断帐号已经登陆,如果该帐号已经登陆,那么将不允许其他机器通过该帐号登陆,请问各位如何解决该问题?用Com吗?
多谢各位了!不好意思只有这么多分了.
 
有没有做过啊,可否给点思路啊!
 
三层,中间层记录变量。c/s就采用数据库处理了。加一个表格,定时刷新。
 
c登录时s端记录该c以登录,其他c再登陆时先到s里保存的已登陆的c用户表里找,如果没有允许登陆,否则kill
 
to dcsdcs:可否说具体些,我现在很急阿,分不够 的话,我可以另外开贴
to skyccf 谢谢你的回答,这样解决的可行性是有的,但是是否便于管理呢,拓展性是否高呢?如果我想查看当前的登陆帐号数量呢?
 
to skyccf:现在还有个问题,那就是如果死机,那么你的表怎么写啊
 
当client登录时,在server用数据库记录登录信息,当又有client从其它地方登录时,先到服务器端查看当前账号是否已经登录,如果没有登录,就允许登录,如果已经登录,就将原Client下线,允许新的客户端账号登录(也不一定是这样处理,看你具体的要求了).服务器端设一个timer,定时判断当前用户是否还在线,就是给客户端发送信息,并从客户端收到信息.如果客户端不能正常返回信息,可以认为客户端已经掉线了(或死机了).可以将此账号的登录信息删除.至于想看当前登录的用户数量,那就很简单了,直接从服务器端表中统计就行了.
 
to zjhjp:"服务器端设一个timer,定时判断当前用户是否还在线,就是给客户端发送信息,并从客户端收到信息.如果客户端不能正常返回信息,可以认为客户端已经掉线了(或死机了)."
1、这个可不可以用socket做啊?或者用COM,是不是控制的更好些,因为我现在的要求还不是很明朗,可能还要改.
2、还有个问题,为了数据的安全性,我要定期修改数据库的密码,在前台如何作啊?
谢谢了,感觉自身太差了,麻烦各位了
 
可以考虑做三层,你的中间服务器做为数据转发服务器也可,做为登录服务器也可。
一般情况下,做为登录服务器,如果用户登录了,则将用户信息记录下来,对应的可以有如下的结构:用户的标识位,SOCKET的套接字号。
如果在登陆的时候发现该用户已经登录,则关闭该用户的连接。
一般的如果正常情况下,用户下线是可以收到消息的,这时候该用户的资源释放掉。
对于断电、断网等特别情况,你可以加一些处理。例如:你的用户数如果不是很多的话,可以定时向用户发送确认侦,如果用户有回的,则该用户在线,如果用户连续三次没有回的,则释放该资源。如果你的用户数很多,你可以再加一个标识位:MAYBELOST,如果有数据在发送的时候失败,将该位设成TRUE,定时向该位为TRUE的用户发送确认侦,如果收到用户的确认侦则将该位设为FALSE。
以上只是我的想法,如果有人有更好的想法,希望能提出来,大家一起交流一下。
 
做一个已登录表志
定时刷新,一定时间内客户端没有刷新,那就是他下线了
 
做一个已登录表志主鍵
具體思路:
a.當用戶正常登錄時登給服務端作已經登錄的標志
如:unlogin=1(表示登錄)unlogin=0(表示未登錄)
b.客戶端退出後,及時更新unlogin=0
c.異常情況處理可以附加socket來實現實時監控客戶登錄情況來處理。
 
已经很长没登陆大富翁了,刚换了家单位,不给上网,没能及时回贴,不好意思了!
通过上面各位的回答,小弟在思路已经有了初步的方向,想通过socket对异常进行控制,可否提供部分代码,多谢各位了!事后肯定另外开贴给分的!拜托了啊!
 
s可以定时发链路测试包如果正常收到回应说明ok,否则(异常、超时连不通)说明c已下线 从表中删之。
你可以把表设计成如下格式(仅供参考)
|user |IP |port |activetime |.....(other info you needed) |

activetime记录c最近活动(c发信息或s发测试包c的回应都算)的时间,定时刷新的时候如果时间差过长(比如30sec)就删之,允许其他登陆
 
说的不是很明白,可以qq37415461交流
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3285852
你可以参考一下上面关于异常退出的处理.
另外,socket有异常出错的error值相对应的出错说明,你可以上网查一下.
 
后退
顶部