discuz在线人数的实现原理(Discuz6.1.0)

1、首页上的“在线会员”,显示的是简略版

2、点击首页上的“在线会员”,去到“在线用户”的详细页,http://yourdomain.com/member.php?action=online

        实现原理:依赖于一个session表,{$tablepre}sessions。

        用户进入论坛(index.php:197行)或者版块首页(forumdisplay.php:207行)会触发一个 updatesession()函数(在include/global.func.php里面定义),还有其他地方也有触发这个函数。这个函数会往 {$tablepre}sessions表里面插入一条新记录(已有记录则更新这条记录),插入的内容包括当“前动作”的代号、当前论坛ID,当前主题 ID。

        首页取在线会员数首页是取$_DCOOKIE['onlineusernum'] 值($_DCOOKIE其实就是$_COOKIE),没有的话再从sessions表里面count(*)一下,还有一些处理总在线人数、游客人数、隐身 人数的逻辑处理,具体的可以看一下index.php 173-240之间的代码;在线用户页(member.php 23行-50行之间),也是也从sessions表里面count(*)一下总在线人数,然后再根据sessions表里面的fid(论坛ID)和 tid(主题ID)左连接forums、threads表取得论坛名称、帖子标题,至于“当前动作”,sessions里面保存的是一个代号,相对应的文 字在templates/default/action.lang.php文件里面“当前动作”是一个全局变量$discuz_action ,在不同页面有不同的值,如在:
index.php     $discuz_action = 1;(浏览论坛首页)
logging.php    $discuz_action = 6;(登录论坛)
viewthread.php  $discuz_action = 3;(浏览帖子)

以上代码是针对DZ6.1版本。



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


上一篇:gitHub上边android studio开发的开源项目转为Eclipse中的项目,个人调试过的可以使用


下一篇:软件事务内存导论(六)配置Akka事务