如何防止不同的用户用同一个帐号登录?

hiweiyi2000 2003-07-26 10:03:26
我做网页用的是ud,功能不行。想大家给想点办法
...全文
129 点赞 收藏 46
写回复
46 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mendel 2003-08-30
断线,直接关IE,还是断电,那只能等触发SESSION_END事件。然后在那里修改用户的状态。也就是把用户在线的值由0改成1。
回复
broze 2003-08-29
如果用户在局域网里面登录怎么办??
回复
BadBoyCyh 2003-07-29
对了,差点忘了说,用zorou_fatal(代码比人可爱)说的那个方法有个缺点就是用户没有正常退出,也就是说用户直接关闭浏览器的话,就无法把1改回0了,还是用在线人员统计这个方法比较好,请参考下面的代码:

======制作原理======

方法就是当用户访问网页时将用户的信息添加进数据库里
在添加的同时,检查数据库里是否有该用户的在线记录,如
果有,则更新该记录,如果没有就把他添加进数据库.
并删除在指定时间内没有活动的在线记录.(大概就是这样吧!)

======数据表设计=======

新建一个数据表,名为"Online"
删除自动编号字段
建立以下字段
字段名:ID 类型:数字
字段名:GUESTNAME 类型:文本
字段名:STATS 类型:文本
字段名:VISITIME 类型:日期/时间
字段名:OUTIME 类型:日期/时间


=======================以下部分源码,供参考,如果写得不好,欢迎指正=======================

<%
sub activeonline()

dim ip

'////删除180秒内不活动的在线记录.
sql="Delete FROM online WHERE DATEDIFF('s',outime,now())>180"
Conn.Execute sql

if stats="" then'//如果stats的值为空,则显示为
stats="不知在做什么?"
else
stats=stats
end if

IP=replace(Request.ServerVariables("REMOTE_HOST"),".","")'////获取IP并消去IP中的"."

'////检查Online表中是否已有这个IP的记录

sql="select id from online where id='"&ip&"'"
set rs=conn.execute(sql)

if rs.eof or rs.bof then'////如果没有该IP记录则添加在线记录

sql="insert into online(id,guestname,stats,visitime,outime) values ("&ip&",'游客','"&stats&"',Now(),Now())"

else'////如果Online表中已有该IP记录则更新该记录

sql="update online set outime=Now(),stats='"&stats&"',guestname='游客' where id='"&ip&"'"

end if
conn.execute(sql)

end sub
%>
==========================实例===========================
将以上代码修改并保存为"Online.asp"嵌入在各网页的尾部

<%

dim conn
dim connstr
on error resume next
connstr="DBQ="+server.mappath("数据库名称.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr
'保存为conn.asp文件
%>

<!--#INCLUDE FILE="conn.asp" -->
<%

dim stats

stats="查看在线"

call activeonline()


Set rs = Server.CreateObject("ADODB.Recordset")
sql="SELECT Id,GuestName,Stats,Visitime,Outime FROM Online ORDER BY Visitime Desc"
rs.open sql,conn,1,3

total=rs.RecordCount

%>
<table border="1" cellpadding="2" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" height="53">
<tr>
<td width="20%" height="16" align="center">昵称</td>
<td width="20%" height="16" align="center">动作</td>
<td width="20%" height="16" align="center">来访</td>
<td width="20%" height="16" align="center">最后活动</td>
</tr>
<%do while not rs.eof%>
<tr>
<td width="20%" height="28" align="center"><%=rs(1)%></td>
<td width="20%" height="28" align="center"><%=rs(2)%></td>
<td width="20%" height="28" align="center"><%=rs(3)%></td>
<td width="20%" height="28" align="center"><%=rs(4)%></td>
</tr>
<%
rs.movenext
loop
%>
</table>
在线人数:<%=total%>
<%
rs.close
set rs=nothing

%><!--#INCLUDE FILE="Online.asp" -->
回复
cabecbbc 2003-07-28
在用户那设置一个bool型字段,用来判断用户是否登录。
当用户初次log on时,就把字段设置为1
然后,在他注销或者超时的时候设置为0
这样,就可以了。
回复
webcsdn 2003-07-28
和楼上同一个问题“超时或关掉窗口”
回复
RainStoneMail 2003-07-28
当用户超时或关掉窗口时,如何获知。如果这个问题解决不了,谈那些数据库处理都是没有用的,不只哪位大虾知道
回复
多个字段 登陆后设为1 否则为0

每次用户登陆检测是否为1 是则显示出错信息,已经登陆

每次用户退出改为0
回复
czp98069806 2003-07-28
没这个必要
回复
heimao111 2003-07-28
使用sessionid岂不更好
回复
GHOSTWY 2003-07-28
多个字段 登陆后设为1 否则为0

后面的不用我说了吧
回复
zhangking 2003-07-28
To ssm1226(雨中人) :
你者只能限制一个帐户,同时只能登录一个, 但是如果帐号被别人盗用, 或者是用户自己借给别人的, 你怎么判断用户的身份?????
回复
jackynet 2003-07-28
还真是个问题啊,看了这么多,感觉真无所适从了。
回复
webcsdn 2003-07-28
GZ
回复
zhangking 2003-07-28
结论: 在目前的网络环境下, 这是不可能的! 就像你要求: 防止不同的用户用同一把钥匙打开同一把锁. 因为钥匙拿在谁的手里, 你根本无法限制!

结论: 在目前的网络环境下, 这是不可能的! 就像你要求: 防止不同的用户用同一把钥匙打开同一把锁. 因为钥匙拿在谁的手里, 你根本无法限制!

结论: 在目前的网络环境下, 这是不可能的! 就像你要求: 防止不同的用户用同一把钥匙打开同一把锁. 因为钥匙拿在谁的手里, 你根本无法限制!
回复
ssm1226 2003-07-28
online表
记录每个用户登录时间


用隐藏帧定时刷新,每次刷新时,都更新该用户登录时间,同时,检索所有在线用户登录时间是否超出有效时间,超出,则删除
回复
stormhu 2003-07-28
关注
回复
daeren 2003-07-28
将Session存入数据库
然后检查Session是否存在
当在次有人访问页面时,如果Session超过了你社定的时间,删除Session
回复
dyfdany 2003-07-28
關注此貼

這個用戶登陸的問題,
前一個月,
小妹,做過一個實際的項目,
最終以失敗告終,沒有解決掉 :(
我也希望得到高手的幫忙

以下是不小妹,所使用的方法



1 用字段 online ,來判斷,是否在線狀態,
(失敗,用戶關閉IE,死機,斷電源,無法改變值)

2
用" Sessiion /Application " 同一用戶,同一時間,多人使用時,根本判斷不出來,
(失敗,方法不對,只能判斷,用戶是否登陸而已)

3
If IsObject(Session)=true then
Else
End IF
來自一位朋友的幫助,
(失敗,第一次判斷是成功,當第二次刷新時,就出現程序錯誤,而且二台電腦一起使用時,根本無法判斷)

4
使用 GLOBAL.ASA 這個 文件內,利用這四個Sub

SUB Application_OnStart
END SUB
SUB Application_OnEnd
END SUB

SUB Session_OnStart
END SUB
SUB Session_OnEnd
END SUB


判斷,這樣估計可以解決此種情況:
[和方法一有關系]
用戶關閉IE,死機,斷電源
可是,這個文件居然無法對數據做任何操作 :(
(失敗)

5
如果,后端用得是,Sql Server數據庫,
寫個觸發器,來解決,用戶關閉IE,死機,斷電源這個問題,
再對數據庫操作
如果,用得是Acess 的話,就無法做到,
使用觸發器,只可惜,小妹,現在的水平,還不會寫這個功能的觸發器,
不知哪位高手可否幫助???

6
或者使用Active 控件,或者 自己寫的Class


就這些,不知道,誰還有更好的方法?
有人說做不到,
我敢肯定得告訴大家,
有個電信的電影網站,就使用了這個方法,
同一用戶,同一時間,多人不可使用的,只能一人使用


回复
我不是香烟 2003-07-28
同意 gshope(gshope) ( ) 的看法

你怎么判断客户是注销退出网站的还是强行关浏览器退出的呢?
回复
zhangking 2003-07-28
结论: 在目前的网络环境下, 这是不可能的! 就像你要求: 防止不同的用户用同一把钥匙打开同一把锁. 因为钥匙拿在谁的手里, 你根本无法限制!
回复
加载更多回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2003-07-26 10:03
社区公告
暂无公告