我写了一个在线统计,还有些问题想和大家讨论
我已写了一个在线统计程序,规定5分钟内活动的为在线用户,通过ip来判断用户
但我们学校的机房对本站的访问量很大,一个机房有200台以上机器,如果一个机房内在5分钟有50台机器访问本站的话那么应该在线人数统计为50,但因为一个机房是一个独立ip,所以自然程序统计的结果是在线人数1人。
为了达到精确统计,我想改成通过取得客户端网卡MAC地址和访问时间来统计在线人数,此法就能解决我上面提到的问题,但我在网上搜了一下没发现有前人用此法统计在线人数,都是通过ip和时间来统计,我怀疑是不是用取MAC地址统计有什么缺点吗?
欢迎大家和我讨论用何种方法统计最佳?或提供其它方法,要求能对我上面的情况进行准确统计!
问题点数:100、回复次数:21Top
1 楼honghe1(和良)回复于 2004-12-03 18:17:23 得分 5
sessionID呢?Top
2 楼ygjwjj(塔克拉玛干---胡杨林)回复于 2004-12-03 18:17:41 得分 5
高安全级别取不到MAC地址.Top
3 楼arcow(冲星)回复于 2004-12-03 22:31:05 得分 0
大家继续啊Top
4 楼Camelot(罕疯)回复于 2004-12-03 22:36:29 得分 5
sessionID+ip最好了。可以的话加cookieTop
5 楼hahawen(变态的大龄青年)回复于 2004-12-03 22:41:52 得分 5
你可以获取他的实际的ip,地址啊。faq里面有帖子讲的。
不过建议用sessionId就可以了Top
6 楼arcow(冲星)回复于 2004-12-04 08:28:29 得分 0
sessionID
怎么得到?是唯一的吗?Top
7 楼coolstr(占卜師oοΟ)回复于 2004-12-04 09:29:15 得分 5
唯一sessionID的取得方法: session_id();Top
8 楼hflsj(红枫)回复于 2004-12-04 18:45:53 得分 5
取不到客户端的mac地址 用sessionID 吧Top
9 楼arcow(冲星)回复于 2004-12-04 20:41:15 得分 0
对服务器的负担 大不大?
是不是一但关掉浏览器后sessionid值又换了?Top
10 楼arcow(冲星)回复于 2004-12-04 20:45:39 得分 0
当所有浏览器关了sessionid值又换了,如果用户在我设定的时间内(比如5分钟)再登陆一次网站的话那么在线统计将会把此人统计成二人在线,明显会使统计人数增多,所以也不是很好的解决方法Top
11 楼honghe1(和良)回复于 2004-12-06 10:05:03 得分 5
用数据库怎么样?思路是这样的,表结构(onlineUser)如下:
---------------------------
sessionid | newLoginTime|
--------------------------
当页面被加载时,首先 delete from onlineUser where (newLoginTime和当前时间相差大于指定时]
间)。然后用用户的sessionid到数据库中查,查到执行update onlineUser set newLoginime=(Now)
where sessionid=(sessionid),否则查入一条新的记录。然后select count(*) from onlineUser得到
新的再线数目。
缺点是,每加载一次页面,就要执行三条SQL语句(当然可以考虑三条语句同时一次执行),对数据库
还是有一定的压力。Top
12 楼jxflll(峰)回复于 2004-12-06 10:28:57 得分 10
关注。顶!Top
13 楼arcow(冲星)回复于 2004-12-06 22:50:51 得分 0
to honghe1(和良)
你的这个思路和我想的上面是致的,但这样
当所有浏览器关了sessionid值又换了,如果用户在我设定的时间内(比如5分钟)再登陆一次网站的话那么在线统计将会把此人 统计成二人在线 ,明显会使统计人数增多,所以也不是很好的解决方法
统计成二人在线,所以还不是唯一的方法Top
14 楼lingyun2111(凌云)回复于 2004-12-07 10:43:44 得分 10
关注,楼主做完善,可否给我一份,我研究研究啊^_^Top
15 楼arcow(冲星)回复于 2004-12-07 12:08:34 得分 0
up by myselfTop
16 楼Jzealot(小瑞)回复于 2004-12-07 12:11:47 得分 10
通过php调用javabean可以得到macTop
17 楼arcow(冲星)回复于 2004-12-07 20:53:57 得分 0
upTop
18 楼arcow(冲星)回复于 2004-12-08 11:32:56 得分 0
upTop
19 楼honghe1(和良)回复于 2004-12-08 12:43:04 得分 5
主要是asp的Global.asa有时并不是像资料上介绍的那样能很好的工作,比如:session_end事件,资料
介绍用户关闭浏览器和session超时就执行,问题是我关闭浏览器后要等很久(默认20分钟的超时时间)才
执行,这算什么啊,我和大家也是一样的痛苦的.Top
20 楼honghe1(和良)回复于 2004-12-08 12:45:38 得分 5
怎么办呢~~~~~~~~~~~~Top
21 楼honghe1(和良)回复于 2004-12-08 13:07:27 得分 25
看来用sessionid也不能唯一确定一个人,那还有其他什么方法可以唯一确定一个人呢.
这样好吗,我们用Cookies.第一次来的兄弟没,查Request.Cookies("sessionid")<>"" ?
if Request.Cookies("sessionid")="" then '我们的策略认为是新来的朋友
sessionid=Session.SessionID
response.Cookies("sessionID")=sessionid
response.Cookies("sessionID").Expires=Now + 1
'一天后为空,不过具体可以用dateAdd()来得到5分钟过期时间,5分钟后这个Cookies为空
response.Cookies("sessionID").Domain="www.yourWebSiteName.com"
response.Cookies("sessionID").path="/"
'这里加入上面的数据库插入操作
else
'认为在线,更新Cookies的生存期,这里重复上面的Cookies操作就是了
'加入上面的数据库更新在线时间操作,刷掉过期用户操作
end if
Top




