免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1462 | 回复: 1

Discuz!X2论坛 “在线时间”更新问题 [复制链接]

论坛徽章:
0
发表于 2012-02-19 20:36 |显示全部楼层
Discuz!X2论坛 “在线时间”更新问题










最近做一个论坛,其实DZ并不是多难,目录结构以及命名都比较规范。就是后台稍微有点复杂,遇到问题去www.discuz.net搜索几乎都能找打答案。

不过,这个问题比较麻烦,就是会员“在线时间”更新的问题。有时候不更新,一直为零,下面找出更新时间的函数吧

在根目录/source/function/function_core.php这个文件中,函数就是updatesession()这个函数,看这个函数的最后一部分,这是关键的地方,更新用户在线时间相关的两张表;pre_common_member_count和pre_common_member_status
  1. 1 if($_G['uid'] && TIMESTAMP - $ulastactivity > 21600) {
  2. 2             if($oltimespan && TIMESTAMP - $ulastactivity > 43200) {
  3. 3                 $total = DB::result_first("SELECT total FROM ".DB::table('common_onlinetime')." WHERE uid='$_G[uid]'");
  4. 4                 DB::update('common_member_count', array('oltime' => round(intval($total) / 60)), "uid='$_G[uid]'", 1);
  5. 5                 dsetcookie('ulastactivity', authcode(TIMESTAMP, 'ENCODE'), 31536000);
  6. 6             }
  7.               DB::update('common_member_status', array('lastip' => $_G['clientip'], 'lastactivity' => TIMESTAMP, 'lastvisit' => TIMESTAMP), "uid='$_G[uid]'", 1)
  8. 8         }
复制代码
可以看到,当用户上线的时候,当前服务器时间减去上次活动时间大于21600秒也就是6个小时的时候,把这个定义为状态一,那么,在状态一下将更新pre_common_member_status表中当前用户的活动时间和访问时间等等;

当满足状态一条件的时候,如果当前服务器时间减去上次活动时间大于43200秒也就是12个小时的时候更新表pre_common_member_count,就是在这里更新在线时间的。

想要更新的速度更快更精确,那么就把这两个时间调小,比如一个小时或者两个小时更新一次,这个根据需要了。

PS:更新时间调小也就意味更新频率加大,增加服务器的负担,可以在前面加上时间段的判断,或者在线用户多少的判断,根据综合因素调整更新时间间隔。

论坛徽章:
0
发表于 2012-02-19 20:36 |显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP