Discuz在线人数统计原理-个人分析

简介:
+关注继续查看


Discuz在线人数统计原理-个人分析

 

eluban论坛在线人数统计原理

2013-5-6

一、基本原理(流程)

 

 

1、读取和生成在线人数

用户每次进入首页,会读取COOKIE中的$_DCOOKIE['onlineusernum'](在线人数cookie值,此cookie包括会员和游客)。

[a]、如果【有】,这个值就去取,然后直接显示。

[b]、如果【没有】,系统就会分别统计表cdb_sessions中“会员(已登录)”和“游客(没有登录)”的人数。并创建$_DCOOKIE['onlineusernum']注意:此cookie时间只有5分钟。如果过了5分钟,用户再次进入首页,则需要重新到数据库获取并重新创建cookie。五分钟时间刚好,DZ这种做法可以有效的缓解服务器的压力。

 

会员在cdb_sessions表中会记录用户的IPusernameuid

游客在cdb_sessions表的usernameuid为空,仅记录IP,以此来区分。

 

[c]、另外论坛在线人数统计还受“在线保持时间”控制,如图:

 

“在线保持时间”是指:用户过了这个设定的值没有活动,然后其他任何一用户任一操作都会使系统自动将表cdb_sessions中此用户的数据删除。注意:只是删除此用户在首页显示的在线状态,不是已退出网站(即此用户还是登录状态)。

 

2、更新用户状态

用户每刷新一次页面(包括打开任何一个新页面),系统都会修改表cdb_sessions中的lastactivity(最后活动时间)字段和action(当前操作代号)等。比如:会员是根据usernameuid进行修改。游客是根据IP进行修改。

 

3、用户退出处理

用户点击“退出”,系统会删除cdb_sessions中此账号对应的sessions信息。

注意:直接关闭浏览器、直接清除浏览器cookie或长时间没有操作页面。cdb_sessions表中这些用户会根据“在线保持时间”来处理。

如果当前时间  最后活动时间lastactivity >在线保持时间,系统自动删除cdb_sessions表中此用户数据。

如果当前时间  最后活动时间lastactivity <=在线保持时间,

cdb_sessions表中如果【有】此用户信息就修改此用户的最后活动时间lastactivity

cdb_sessions表中如果【没有】此用户信息就添加一条此用户认证信息。

 

二、数据库

数据库类有专门的一张表记录当前在线用户的登录状态(表:cdb_sessions

 

 

各字段释义如下:

cdb_sessions    会员认证表

sid    char    SID

ip1    tinyint    IP

ip2    tinyint    IP

ip3    tinyint    IP

ip4    tinyint    IP

uid    mediumint    会员ID

username    char    会员名

groupid    smallint    会员组

styleid    smallint    风格ID

invisible    tinyint    是否隐身登录

action    tinyint    当前动作

lastactivity    int    最后活动时间

lastolupdate    int    最后更新时间

pageviews    smallint    页面访问量

seccode    smallint    记录验证码

fid    smallint    论坛ID

tid    mediumint    主题ID

bloguid    mediumint    正在浏览的文集

 

三、代码

1、  控制处理代码(根目录index.php220行左右)

 


  1. <?php 
  2.         if(empty($_DCOOKIE['onlineusernum'])) { 
  3.             $onlinenum = $db->result_first("SELECT COUNT(*) FROM {$tablepre}sessions"); 
  4.             if($onlinenum > $onlineinfo[0]) { 
  5.                 $_DCACHE['settings']['onlinerecord'] = $onlinerecord = "$onlinenum\t$timestamp"
  6.                 $db->query("UPDATE {$tablepre}settings SET value='$onlinerecord' WHERE variable='onlinerecord'"); 
  7.                 require_once DISCUZ_ROOT.'./include/cache.func.php'
  8.                 updatesettings(); 
  9.                 $onlineinfo = array($onlinenum$timestamp); 
  10.             } 
  11.             dsetcookie('onlineusernum'intval($onlinenum), 300); 
  12.         } else { 
  13.             $onlinenum = intval($_DCOOKIE['onlineusernum']); 
  14.         } 
  15.         $onlineinfo[1] = gmdate($dateformat$onlineinfo[1] + ($timeoffset * 3600)); 
  16.  
  17. ?> 

2、  模板循环显示代码(模板根目录discuz.htm290行左右)

 


  1. <ul class="userlist"> 
  2. <!--{if $whosonline}--> 
  3.     <!--{loop $whosonline $key $online}--> 
  4.         <li title="{lang time}: $online[lastactivity]{LF} {lang action}: $online[action] <!--{if $online['fid']}-->{LF}{lang forum}: $online[fid]<!--{/if}-->"> 
  5.         <img src="images/common/$online[icon]" alt="" /> 
  6.         <!--{if $online['uid']}--> 
  7.             <a href="space.php?uid=$online[uid]">$online[username]</a> 
  8.         <!--{else}--> 
  9.             $online[username] 
  10.         <!--{/if}--> 
  11.         </li> 
  12.     <!--{/loop}--> 
  13. <!--{else}--> 
  14.     <li style="width: auto">{lang online_only_guests}</li> 
  15. <!--{/if}--> 
  16. </ul> 

 

 




      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1194265,如需转载请自行联系原作者






相关文章
|
23天前
|
存储
统计网站的在线人数
统计网站的在线人数
9 0
|
5月前
|
前端开发 JavaScript 网络协议
分析“如何设计一个 70w 在线人数的弹幕系统”
分析“如何设计一个 70w 在线人数的弹幕系统”
36 0
|
5月前
|
缓存 运维 前端开发
如何设计一个70W在线人数的弹幕系统文章分析
如何设计一个70W在线人数的弹幕系统文章分析
36 3
|
SQL 监控 HIVE
网站流量日志分析--统计分析--回头单次访客分析|学习笔记
快速学习网站流量日志分析--统计分析--回头单次访客分析
69 0
网站流量日志分析--统计分析--回头单次访客分析|学习笔记
|
数据库
LeetCode(数据库)- 统计各专业学生人数
LeetCode(数据库)- 统计各专业学生人数
79 0
|
开发者
网站访问量统计小案例 | 学习笔记
快速学习网站访问量统计小案例。
219 0
|
存储 SQL Oracle
30亿日志,检索+分页+后台展示,你是否遇到过更奇葩的需求?
一个数据库查询日志,前台页面显示的问题。
674 0
30亿日志,检索+分页+后台展示,你是否遇到过更奇葩的需求?
|
数据采集 JavaScript 测试技术
python爬虫项目实战,爬取用户的信息,让你更好的筛选
1.导入模块 import urllib.request from bs4 import BeautifulSoup 2.添加头文件,防止爬取过程被拒绝链接 def qiuShi(url,page): ################### 模拟成高仿度浏览器的行为 #############...
1492 0
|
PHP 数据安全/隐私保护
如何在WORDPRESS中添加CNZZ等统计代码
如何在WORDPRESS中添加CNZZ等统计代码http://www.bieryun.com/1257.html1, 首先进入我们的WordPress网站后台,即在浏览器上输入 网站域名/wp-login,如我的网站是输入forlong401.
3264 0
|
监控 定位技术
老司机教你分析日志:分析用户的地理位置信息
地理位置的需求 通常我们分析用户的需求,了解到用户当前位置在哪里非常重要,例如,可以根据用户的地理位置,针对性的推广本地广告。 通常,我们可以在客户端获取定位权限来获取GPS信息。但是如果用户关闭了定位呢?如何获取呢?我们还有另外一种方法,就是通过用户当前的IP来定位。
4016 0
推荐文章
更多