关于MIDAS中如何防止一个用户名/口令多次上线

mingyeh 2002-03-13 04:19:28
请问各位大虾在MIDAS中如何防止一个用户多次登陆系统啊?
DELPHI有没有相关的函数提供呢?
我知道可以将登陆的用户名写在一个数据表里面,可是会影响效率啊~~~~~
怎么办怎么办???小弟着急的快抓狂了
100分不多,但是却是我能给出的最高分了,希望大家一定帮帮忙~
...全文
618 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangyugw 2002-03-15
  • 打赏
  • 举报
回复
我是这样做的
用户是否上线(true/false)
如果该用户非法退出。而为把改用户退出的信息返回服务器。可以如下解决
你一定有一个管理级用户
用该用户可以察看那些用户在线上,如果非法退出而不可以连接服务器的可以有管理员进行设置更改她的上线为false
还可以在服务器定时对客户端进行监测看他是否在线如果三次检查都没在线就可见自动将她的上线为false;
ChipHead 2002-03-15
  • 打赏
  • 举报
回复
可以让客户定期向服务器发送消息说“我还活着!”……然后如果连续几个周期没有收到,则自动从列表中删除客户连接。
mingyeh 2002-03-15
  • 打赏
  • 举报
回复
那么blackfiles(从来是我伤心) 的公司是用什么办法解决或补救这个问题的呢?
blackfiles 2002-03-15
  • 打赏
  • 举报
回复
是个问题。我公司的系统就存在这个问题。
mingyeh 2002-03-15
  • 打赏
  • 举报
回复
这个方案的确很好,但是还是没有解决用户非正常退出的问题
mingyeh 2002-03-15
  • 打赏
  • 举报
回复
真心感谢大家的参与,经过仔细的思考,决定使用 YANGYUGW(yangyu)的方案,用API函数将机器的硬盘序列号取出来,写到用户信息数据库中,登陆的时候检验数据库中的值和客户电脑硬盘序列号的值是否一致,一致则接受登陆请求,不一致拒绝用户登陆。
这也许可以在技术上保证一个用户名同时只能有一人使用。
如果大家也同意我的观点,我就分分数了!
yangyugw 2002-03-15
  • 打赏
  • 举报
回复
看看这个,会对你有启发
http://www.csdn.net/expert/topic/560/560755.xml?temp=.4501764
rqcong 2002-03-15
  • 打赏
  • 举报
回复
我也十分想了解这个问题,谢谢!
mingyeh 2002-03-15
  • 打赏
  • 举报
回复
呵呵
好啊~~~~
不过学校的电脑连不上
只好回家再问,不知道各位大虾还有什么高招?
yangyugw 2002-03-15
  • 打赏
  • 举报
回复
对不起了,这个我也不太知道,不过可以去问问李维
http://forum.vclxx.org
希望李维给你方法到时别忘了告诉我这个菜鸟
:)
mingyeh 2002-03-15
  • 打赏
  • 举报
回复
QQ采用的可能是一种超时机制
就是如果客户一段时间内没有向服务器发送信息就设置为离线
但是不知道在delphi中有没有相关的函数可以调用
yangyugw 2002-03-15
  • 打赏
  • 举报
回复
可以参考一下qq的做法呀,不过我不太了解qq
不过一定是服务器进行了检查
mingyeh 2002-03-15
  • 打赏
  • 举报
回复
to:YANGYUGW(yangyu)
你的方法有一定的道理
但是,第一种方法需要人工干预,如果系统的规模比较大就很难实现了
第二种方法的检测间隔很难掌握,容易造成在线用户被踢下线,而且当在线用户比较多的时候系统开销较大
mingyeh 2002-03-14
  • 打赏
  • 举报
回复
这个的确是一个很重要的问题,不然如果用户的电脑出现电源或网络故障,他的用户名就永远挂在系统上,也就不能在登陆了。
不知道能不能用delphi实现类似于ASP的超时机制
rmy 2002-03-14
  • 打赏
  • 举报
回复
如果你是三层系统的话
在服务器上定义一个过程 客户端传递密码和用户名
该过程先判断合法性如果合法将此用户名存档
存档时检查档案中是否有该用户存在 如果存在向客户端返回真
否则返回假 客户端通过调用服务端的过程 根据返回的真假 决定是否让起上线
简单 实用 呵呵
qiubolecn 2002-03-13
  • 打赏
  • 举报
回复
想问,如果某一个客户掉线了,非正常退出,他要再进入你有没有处理?
mingyeh 2002-03-13
  • 打赏
  • 举报
回复
多谢quark(夸克)
大恩大德,来日再抱~~!
quark 2002-03-13
  • 打赏
  • 举报
回复
将网卡MacID、计算机名称、IP地址、登陆账号、真实姓名、线程ID保存在数组或列表中,新用户登陆时判断该用户在数组或列表是否存在
quark 2002-03-13
  • 打赏
  • 举报
回复
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//取得客户端信息(网卡MacID、计算机名称、IP地址、登陆账号、真实姓名、线程ID、)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TCORBAServer_WeiHai.GetClientInfo(const vNetCardID, vComputer, vClientIP, vUser, vName, vThreadID, vStatus: WideString);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function ClientOnline: integer;
var i: integer;
begin
Result := -1;
for i:=1 to Clients.Count do
if vClientIP=TClient(Clients.Items[i-1]).ClientIP
then begin
Result := i-1;
Break;
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
var ClientID: integer;
ClientNew: Boolean;
begin
ClientNew := ClientOnline<0;//如果ClientOnline<0则认为该客户端为新增用户
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if ClientNew then
begin
Clients.Add(Pointer(TClient.Create));
ClientID := Clients.Count-1;
end else ClientID := ClientOnline;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TClient(Clients.Items[ClientID]).NetCardID := vNetCardID;
TClient(Clients.Items[ClientID]).Computer := vComputer;
TClient(Clients.Items[ClientID]).ClientIP := vClientIP;
TClient(Clients.Items[ClientID]).User := vUser;
TClient(Clients.Items[ClientID]).Name := vName;
TClient(Clients.Items[ClientID]).ThreadID := vThreadID;
TClient(Clients.Items[ClientID]).LastTime := Now;
TClient(Clients.Items[ClientID]).Status := vStatus;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//如果是新增客户端则重画StringGrid表面,否则只刷新StringGrid(LastTime,Status)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if ClientNew then Form_Server.StringGridRepaint else Form_Server.StringGridRefresh(ClientID+1)
end;
mingyeh 2002-03-13
  • 打赏
  • 举报
回复
to windindance(风舞轻扬)
你的方法也是一种解决方案,但是如果用户的IP是动态分配的就不能用了。
另外,建立一个用户表也会造成系统开销。
加载更多回复(2)

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧