注册 登录
编程论坛 ASP技术论坛

禁止同一用户名在不同的IP而同时登陆

dhdhzzw 发布于 2007-09-06 11:31, 2345 次点击

这个问题困扰我好多天了,,,怎么写代码阿?谢过的指点一下、指点一下。

22 回复
#2
hmhz2007-09-06 11:34
你没说清楚
#3
dhdhzzw2007-09-06 11:42

就是一个用户登录后,统一用户不能在登陆。。。。。。。同一用户只允许对那个录一次。

#4
hmhz2007-09-06 17:06
这个不好做,比较麻烦
#5
multiple19022007-09-06 17:11
登陆过的用户写入Online表,登陆时要求Online(ThisUser)=Empty
#6
hmhz2007-09-06 17:12
那退出呢?如果用户直接关闭浏览器怎么办?登陆的用户还在Online表里
#7
multiple19022007-09-06 17:17
以下是引用hmhz在2007-9-6 17:12:18的发言:
那退出呢?如果用户直接关闭浏览器怎么办?登陆的用户还在Online表里

Online表里可以保存最后一次动作的时间

登陆要求Online(ThisUser,Now-LastAct<20min)=Empty


其实这个本身就不太好做的……你IE开着又不会一会给服务器发个包……

#8
yms1232007-09-06 17:19
这个可能要用到global.asa文件,不过个人觉得asp对这个文件支持的不是特好。
#9
hmhz2007-09-06 17:21
保存最后一次活动时间,这样也不科学,如果用户有2分钟没动,而另一用户在你为活动之前开始登陆,那不是一样可以登陆了
#10
multiple19022007-09-06 17:25
以下是引用hmhz在2007-9-6 17:21:47的发言:
保存最后一次活动时间,这样也不科学,如果用户有2分钟没动,而另一用户在你为活动之前开始登陆,那不是一样可以登陆了

所以说嘛 这个不太好做的

除非你浏览器里放个iframe 每n秒刷新一次报告服务器“我在线!”

如果服务器(n+1)秒没收到这个消息就认为他不在线 别的IP可以用这个帐号登陆……

#11
hmhz2007-09-06 17:27
像QQ做的就很好,几乎达到了即时限制,只要他方一登陆,我方马上就掉线
#12
multiple19022007-09-06 17:34
以下是引用hmhz在2007-9-6 17:27:31的发言:
像QQ做的就很好,几乎达到了即时限制,只要他方一登陆,我方马上就掉线

那就和我10楼回复类似的原理。

我方马上掉线是因为服务器可以向我这里发包,而网页上就不大容易实现

#13
hmhz2007-09-06 17:45

呵呵,如果这样就很容易了,不停的向服务器发包很容易做到,使用即时方法
<script>
function writeHtml() {
try{
var strxmlhttp;
try {strxmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");}
catch(e) {strxmlhttp = new XMLHttpRequest();}
strxmlhttp.open("GET","login.asp",false);
strxmlhttp.send(null);
document.getElementById("div1").innerHTML=strxmlhttp.responseText;
}
catch(e){alert(e);}
}
function MyShow(){timer = window.setInterval("writeHtml()",1000);} //每秒刷新一次
</script>
<body onload="MyShow();">
<div id="div1"></div>
</body>

login.asp
<%
username=session("uers")
times=now()
conn.Execute "update Online set Times='"&Times&"' where username='"&username&"'"
%>

[此贴子已经被作者于2007-9-6 17:50:58编辑过]

#14
multiple19022007-09-06 17:51
以下是引用hmhz在2007-9-6 17:45:53的发言:

呵呵,如果这样就很容易了,不停的向服务器发包很容易做到,使用即时方法
<script>
function writeHtml() {
try{
var strxmlhttp;
try {strxmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");}
catch(e) {strxmlhttp = new XMLHttpRequest();}
strxmlhttp.open("GET","login.asp",false);
strxmlhttp.send(null);
document.getElementById("div1").innerHTML=strxmlhttp.responseText;
}
catch(e){alert(e);}
}
function MyShow(){timer = window.setInterval("writeHtml()",1000);}
</script>

<div id="div1"></div>


login.asp
<%
username=session("uers")
times=now()
conn.Execute "update Online set Times='"&Times&"' where username='"&username&"'"
%>

问题是 很无谓地增加了网络流量,服务器的IIS也不是无限的啊
而且有DDOS的倾向……

#15
hmhz2007-09-06 17:57

一个服务器只要不超过5个这样的,就绝对没问题的,我们的服务器就是,登陆用户就是用即时刷新的,后台也是才用即时的,一共有两个网站都是这样的方法,一直都使用的很好,服务器半个月不启动都没问题

#16
multiple19O22007-09-06 18:04
以下是引用hmhz在2007-9-6 17:57:14的发言:

一个服务器只要不超过5个这样的,就绝对没问题的,我们的服务器就是,登陆用户就是用即时刷新的,后台也是才用即时的,一共有两个网站都是这样的方法,一直都使用的很好,服务器半个月不启动都没问题

汗 你编程中国敢把这代码放上去么……

#17
hmhz2007-09-06 18:08
呵呵,我们是自己的服务器,就放两个站,有问题吗?哈哈,下班了,88
#18
vidhl2007-09-07 07:05
#19
dhdhzzw2007-09-07 11:06

不停的向服务器发包,,让他判断你在线,,是不是再设一个权限,在现实权限为0
不可登陆,,,不在线时权限为1
可登陆,,,,但权限一定要在数据库里建表么?

#20
hmhz2007-09-07 12:44
查询时间来判断,不要使用 0和1来设置权限,这样就必须在关闭网站时将1变成0 否则下次就无法登陆了
#21
shangfan3332007-09-07 15:22

可以用session在java程序里控制,登录以后记录session,平均多久判断一下session是否是空,如果是空,把记录的session从表中删除。控制起来有点复杂,应该可以实现

#22
hmhz2007-09-07 15:27

搞清楚,限制只允许一个用户登陆

#23
multiple19022007-09-07 15:53

限制只允许每个用户登陆一个IP
1