论坛上出现了许多站点的用户在线时间,
或者在线用户的列表出现错误数据。(针对X2版本)
看一下模板文件footer.htm中的是否有一条语句<!--{eval updatesession();}-->,这个函数在作怪。
1.解决在线时间不更新的问题
第1步.检查模板
可能的原因是当前模板下footer.htm没有包含<!--{eval updatesession();}-->语句。
可以选择手动在footer.htm中添加,或者用原foot.htm覆盖当前footer.htm文件。
第2步.修改文件
如果站点某些活跃用户出现在在线时间不更新的情况。为了不影响设计逻辑,照以下修改updatesession()函数:
找到function_core.php的第66行附近- if($_G['uid'] && TIMESTAMP - $ulastactivity > 21600) {
- if($oltimespan && TIMESTAMP - $ulastactivity > 43200) {
- $total = DB::result_first("SELECT total FROM ".DB::table('common_onlinetime')." WHERE uid='$_G[uid]'");
- DB::update('common_member_count', array('oltime' => round(intval($total) / 60)), "uid='$_G[uid]'", 1);
- }
- dsetcookie('ulastactivity', authcode(TIMESTAMP, 'ENCODE'), 31536000);
- DB::update('common_member_status', array('lastip' => $_G['clientip'], 'lastactivity' => TIMESTAMP, 'lastvisit' => TIMESTAMP), "uid='$_G[uid]'", 1);
- }
复制代码
修改为
- if($_G['uid'] && TIMESTAMP - $ulastactivity > 21600) {
- if($oltimespan && TIMESTAMP - $ulastactivity > 43200) {
- $total = DB::result_first("SELECT total FROM ".DB::table('common_onlinetime')." WHERE uid='$_G[uid]'");
- DB::update('common_member_count', array('oltime' => round(intval($total) / 60)), "uid='$_G[uid]'", 1);
- dsetcookie('ulastactivity', authcode(TIMESTAMP, 'ENCODE'), 31536000);
- }
- DB::update('common_member_status', array('lastip' =>
- $_G['clientip'], 'lastactivity' => TIMESTAMP, 'lastvisit' =>
- TIMESTAMP), "uid='$_G[uid]'", 1);
- }
复制代码
2.解决用户刷在线时间
同样是修改function_core.php中的updatesession函数
找到
- $lastolupdate = $discuz->session->var['lastolupdate'];
复制代码
删除这句,将其替换成
此方案解决用户刷在线时间,但已经刷过的用户,无法通过此方法恢复。
|