不使用数据库,不自动刷新网页实现在线统计.

unixpeter 2006-01-05 08:36:47
我的思路是这样的,请大家看看。
GLOBAL.ASA
sub application_onstart()
application.lock()
application("total")=application("total")+1
application.unlock()
end sub
sub application_onend()
application.lock()
application("total")=application("total")-1
application.unlock()
end sub
这样是没问题的,这是记录在线访问人数,这个不会出错,关键是登录用户,这样东西就麻烦了,楼上的朋友的意思我没有理解到。
用户登录的时候就这样
if request.form("password")=rs("password") then
session("users")=rs("username")
session.timeout=999
dim a,b,c
a=split(application("Log"),",")
for b=0 to ubound(a)
if session("users")=a(b) then
......
else
if len(application("Log"))=0 then
application("Log")=session("users")
elseif instr(application("Log"),session("users"))=false then
application("Log")=application("Log")&","&session("users")
end if
end if
Next
end if
这样到是可以正常的放进去,但是用户直接关浏览器,这样没办法执行清除某一个application("Log")啊,当在执行sub application_onend的时候,session("users")已经没有了啊?那就根本没有办法找出在application("Log")里面刚刚消失的一个session("users"),那么这样,用户还是在线啊?我是想一个一个的判断,能够放进去在线,但是不知道怎么清除它,论坛里面我的思路是这样的。

显示贴子的所有回复时候:
do while not rs.eof
dim a,b
a=split(application("Log"),",")
for b=0 to ubound(a)
if rs("username")=a(b) then
response.write("this member online")
else
response.write("this member offline")
end if
next
rs.movenext
不能让网页自动刷,我也不想给用户提供这样的功能,只是做个论坛让大家能聊天,自己刷新就行了。如果自动刷新,服务器受不了啊,还是IBM的专业服务器一样受不了,自动刷新请求这些命令,服务器慢死人,有个朋友写的代码我试过,没问题,但是不能自动刷新来做。我就想直接用个APPLICATION给做出来,我就是在想,用户直接关浏览器的时候执行sub application_onend()...end sub,这个时候SESSION值已经没有了,根本就不能清除它,关键就是只要能判断出是那个SESSION(“UERS”)关闭了浏览器,就可以在sub application_onend()...end sub这个里面把它找出来给清除掉,大家帮帮忙吧.小弟郁闷了好几天了,论坛一值都没有开工,就是因为这个单独在线功能,整不出来。汗。。。

那么可以不精确啊,我的意思就是用户自己进入或者刷新一下网页就显示最新的数据,但是有些用户不正常退出登录的话,没办法把APPLICATION里面的登录用户消除啊,我把所有登录的用户放在一个数据组里面,这样到是可以,但是没有办法在用户不正常退出的时候从数据组里面消除它.超时设置到是可以,但是我不想让它超时,我想让它一天不动计算机才超时.
...全文
196 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
unixpeter 2006-01-06
  • 打赏
  • 举报
回复
操作数据库也是一样的,没办法判断是那个用户没有正常退出登录.我试过,如果用户正常退出登录,按我的思路是没有问题的,也是很准确的,时间只用了0.0222222秒左右,非常快.网络速度在慢也是一下就打开,我的服务器是IBM的小型机,放在电信机房的.LINUX操作系统.
unixpeter 2006-01-06
  • 打赏
  • 举报
回复
HOTMAIL,ASP.COM等网站一般都是不超时的,超时就没有意思了.当然这个不能跟银行比,银行是不动就超时.它是涉及金钱.我做的论坛只是免费让用户聊天.
unixpeter 2006-01-06
  • 打赏
  • 举报
回复
谢谢,论坛一天不超时是可以的.这个没有关系,因为没有关系到"钱"这些东西.只是免费提供给用户的.安全应该没有什么问题.而你写的这个是表示当有session开始时才开始统计人数,我想是开始访问网站的时候就计算人数.而且在线与不在线是在用户登录的时候才放入APPLICATION数据组的.可以这样放进去,现在的难点就是如何才能找出没有正常退出登录的用户.因为他在登录的时候,已经放入了一个数据在APPLICATION数据组里面,如果不能消除他,那么,他就算关了浏览器(没有正常退出登录的情况),APPLICATION有他的用户名,那么他就是在线,这样就不行的.
谢谢大家,我也在想解释方法,请问到底是先执行session_onend还是application_onend(用户关闭浏览器的时候).?
KimSoft 2006-01-06
  • 打赏
  • 举报
回复
楼主,B/S结构是基于无状态的Http协议,包括xmlhttp,客户端通过拉的方式从服务器取和数据,通信过后,客户机和服务器是断开状态的。服务器不能主动象用socket一样用推的形式向客户机发送数据。所以在纯的B/S结构中无法做到实时的用户在线。

只能实现相对实时的用户在线。

楼主的“而且我的论坛的用户是设置的一天都不超时”是不合理的、也是不安全的

用application做在线的最简单的办法如下:

session超时时间默认为IIS的20分钟或更小些会精确不少
GLOBAL.ASA
sub session_onstart()
application.lock
application("online") = application("online") + 1
application.unlock
end sub

sub session_onend()
application.lock
application("online") = application("online") - 1
application.unlock
end sub

更好的办法就是用数据库或xml+xmlhttp的方法。
只能想到这么多,供楼主参考,可能有更好的办法,学习。
银狐被占用 2006-01-06
  • 打赏
  • 举报
回复
用FSO写把每个用户的SessionID和登录时间写到记事本中。
设定一个超时时间。
只要有用户长时间无动作就从记事本中删除。
unixpeter 2006-01-06
  • 打赏
  • 举报
回复
大家请看这个网站
www.asp.com
听论坛里面的人说就是一个APPLICATION做的,没有操作数据库,也不超时,当然也不自动刷新网页.实现了每个用户的状态.
online/offline.
unixpeter 2006-01-06
  • 打赏
  • 举报
回复
请问可不可以直接用APPLICATION,不用XML,直接放一个数据组在APPLICATION里面.也不自动刷新请求.而且我的论坛的用户是设置的一天都不超时.不让它超时的.这个都能实现,就是不知道如何把那些非正常退出登录的用户在APPLICATION的数据消除掉.根本没办法判断是那个关闭了浏览器啊.
KimSoft 2006-01-06
  • 打赏
  • 举报
回复
我以前写过一个xmlhttp请求一个online.asp(其实是个xml文件,存储用户信息,最后xmlhttp请求时间),如果最后请求时间和now比较超过xx分钟,删除此用户的node,每个用户请求时遍历一次xml,能做到比较精确的的用户在线,xml放在Application里,速度还可以,千人以下的应用还是可以的,不过xmlhttp刷新时间不能太快。xml此时充当的一个数据库的角色。
lnboy1003 2006-01-06
  • 打赏
  • 举报
回复
学习
unixpeter 2006-01-06
  • 打赏
  • 举报
回复
有什么办法吗?
unixpeter 2006-01-06
  • 打赏
  • 举报
回复
..........
unixpeter 2006-01-05
  • 打赏
  • 举报
回复
记事本也是一样的啊,关键是如何才能消除那些非正常退出登录的用户在登录时存在APPLCIATION数据组里面的值呢?这个就是难点,大家看看啊.
对了,记事本的速度没有一个APPLICATION快,它只调用一次,记事本每次都要读写,直接操作服务器里面的文件,要慢许多.
大家看看啊
emhuangzi 2006-01-05
  • 打赏
  • 举报
回复
思路不错
很多人以前都是一个记事本 就OK

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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