http://community.csdn.net/Expert/topic/4385/4385874.xml?temp=.9047663
解决方案 »
- Post时提示"BOF 或EOF 中有一个是“真”,或者当前的记录已被删除"
- 这是为什么?
- Undeclared identifier: 'CoInitialize'
- 锁住屏幕,不接受按键和鼠标操作怎样实现那?
- 寻求解决方法,数据插入
- indyclient是否可以既发送数据,又可以接收数据? 以下功能可能用indy实现吗?
- 一个小学一年级的题,请大家用DELPHI编个程帮小朋友算一下?
- 谁有空帮我看段代码关于TREEVIEW的 没用过 也不知道哪错了 唉 就50分 会者不难
- 如何快速分离冒号间隔的字符串?
- 有人知道delphi7.0的序列号么?
- IP限制
- 怎样使鼠标捕捉直线或者曲线的交叉点?[悬赏50分]
因为可能会有客户端异常退出的情况,那样异常退出就不能再次登录了我的思路是做一个检测程序,定时检测客户程序是否正常运行(这个用socket就可以做到),对于异常退出的客户端删除他的登录信息,这样就解决了异常退出的情况
三层没做过,你所说的socket,是不是服务端和客户端,都得做啊?
服务端在检测到客户端不存在的情况下,服务端自动执行一段sql来保证数据的统一性啊?
我这里又没有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有问题
或者可通过服务端程序,连接服务端程序时由服务端返回密码。
to wizardqi(男巫):"当然假如客户端出现突发事件,导致非正常断线,当重新连上认证时覆盖原认证项即可。"还可以在具体些啊,我的这个问题说的应该还算清楚,就是帐号001在A机上登陆了,
那么该帐号001就不能够在其他机器上登陆!
而楼主要实现服务器的联合认证,即帐号的全局唯一性方案有很多种比如:如果使用的是公共数据服务器的话可以使用一个公共登陆信息表,每个服务器通过他进行客户登陆信息的管理;当然如果服务器之间没有公共数据库服务器的话,可以使用网络协作的模式进行客户认证,比如一台服务器在接受一个客户登陆请求时先联系其它服务器,检测该客户有无登陆,然后再判定登陆问题。当然无论那种方式都存在一个问题,那就是客户端非法断线后会在服务器残留无效登陆信息,导致坏连接无法正常修复。在这种情况下就需要对客户登陆信息进行注册信息校验,方法如下:
客户第一次登陆时为客户返回一个校验码,并把这个校验码展示给客户,并要求客户记住该码,如果客户在操作过程中意外断线,第二次登陆时要求其出事上次正常登陆后返回的校验码,然后客户根据这个校验码结合帐号扫描登陆信息(包括其他服务器),当找到该项,如果该项在当前接受登陆服务器上就不做任何操作依然返回当前的校验码,如果不在那么就将记录该项服务器上的相关信息和资源释放,在本服务器上为用户重新分配资源记录登陆信息,返回校验码。
当然正常断线就简单了,服务于该客户的服务器只用释放该客户资源消除登陆状态即可。
另一种情况,如果发现要注册的客户已经在另一台服务器上注册但其提供的校验码又和其注册的不一致,就说明该帐号被重复使用。
有劳了