http://community.csdn.net/Expert/topic/4385/4385874.xml?temp=.9047663

解决方案 »

  1.   

    这个做成三层或有一个检测端就好了
    因为可能会有客户端异常退出的情况,那样异常退出就不能再次登录了我的思路是做一个检测程序,定时检测客户程序是否正常运行(这个用socket就可以做到),对于异常退出的客户端删除他的登录信息,这样就解决了异常退出的情况
      

  2.   

    to fishmans(金脚指)
    三层没做过,你所说的socket,是不是服务端和客户端,都得做啊?
    服务端在检测到客户端不存在的情况下,服务端自动执行一段sql来保证数据的统一性啊?
      

  3.   

    1.不知道你是什么数据库哦~~
      我这里又没有DELPHI,不好写代码   可在数据库中建一个用户登录表
       字段(用户名,登陆时间,登陆ip)假设表名为UerLog
    socket你用过吧,做一个服务端,客户端连接到数据库后,在userlog表中加入用户登录记录,同时socket连接服务端,把用户登录信息发给服务端,服务端多线程检测各客户是否在线,可定时发送一个字串,由客户端应答,无应答则表示客户端断线,服务端程序执行delete userlog where IP=客户1IP and 用户名=用户1,服务端socket断开与客户端连接等待连接
       要查当前登录总数,直接查userlog表即可2.修改数据库密码:
    access:  'Alter Database password ' + newpassword + ' ' + Oldpassword
    sqlserver:  'master.dbo.sp_password ''oldpwd'',''newpwd'',''sa''' 
    修改密码后可把新密码加密后写在客户端能访问的地方,如sqlserver中的master库中的一个表里
    客户端连接库时后连接master库取密码,如果master库都不能连接,说明连接sqlserver有问题
    或者可通过服务端程序,连接服务端程序时由服务端返回密码。
      

  4.   

    to fishmans(金脚指) :"服务端多线程检测各客户是否在线,可定时发送一个字串,由客户端应答,无应答则表示客户端断线"这段代码怎么写啊,可不可以给个提示啊?我找了下资料好象没有关于服务端向客户端发送消息的例子啊?还有这个应答有相应是返回的个标记吗?是用什么函数啊?看来我太若了!
    to wizardqi(男巫):"当然假如客户端出现突发事件,导致非正常断线,当重新连上认证时覆盖原认证项即可。"还可以在具体些啊,我的这个问题说的应该还算清楚,就是帐号001在A机上登陆了,
    那么该帐号001就不能够在其他机器上登陆!
      

  5.   

    对于fishmans(金脚指)的方法可能存在问题,原因很简单:很多情况下(通讯跨越互联网)是不可能连上客户端的,因此服务器很难直接主动连接客户,因此状态信息的记录不能有服务器主动获得,只能在客户端与服务器交流的过程中进行。
    而楼主要实现服务器的联合认证,即帐号的全局唯一性方案有很多种比如:如果使用的是公共数据服务器的话可以使用一个公共登陆信息表,每个服务器通过他进行客户登陆信息的管理;当然如果服务器之间没有公共数据库服务器的话,可以使用网络协作的模式进行客户认证,比如一台服务器在接受一个客户登陆请求时先联系其它服务器,检测该客户有无登陆,然后再判定登陆问题。当然无论那种方式都存在一个问题,那就是客户端非法断线后会在服务器残留无效登陆信息,导致坏连接无法正常修复。在这种情况下就需要对客户登陆信息进行注册信息校验,方法如下:
        客户第一次登陆时为客户返回一个校验码,并把这个校验码展示给客户,并要求客户记住该码,如果客户在操作过程中意外断线,第二次登陆时要求其出事上次正常登陆后返回的校验码,然后客户根据这个校验码结合帐号扫描登陆信息(包括其他服务器),当找到该项,如果该项在当前接受登陆服务器上就不做任何操作依然返回当前的校验码,如果不在那么就将记录该项服务器上的相关信息和资源释放,在本服务器上为用户重新分配资源记录登陆信息,返回校验码。
    当然正常断线就简单了,服务于该客户的服务器只用释放该客户资源消除登陆状态即可。
    另一种情况,如果发现要注册的客户已经在另一台服务器上注册但其提供的校验码又和其注册的不一致,就说明该帐号被重复使用。
      

  6.   

    各位可否提供通过socket方法来解决该问题的代码啊!代码出来之日即使给分之时!
    有劳了