发新话题
打印

dz论坛为什么我的在线时间不会变

dz论坛为什么我的在线时间不会变

解决办法一:
include/globle.func.php
if($discuz_uid && $timestamp - $lastactivity > 21600) {
                        if($oltimespan && $timestamp - $lastactivity > 86400) {
                                $query = $db->query("SELECT total FROM {$tablepre}onlinetime WHERE uid='$discuz_uid'");
                                $oltimeadd = ', oltime='.round(intval($db->result($query, 0)) / 60);
                        } else {
                                $oltimeadd = '';
                        }
                        $db->query("UPDATE {$tablepre}members SET lastip='$onlineip', lastvisit=lastactivity, lastactivity='$timestamp' $oltimeadd WHERE uid='$discuz_uid'", 'UNBUFFERED');
                }

这段是对会员表里的在线时间做一个记录,看帖子的时候,查看的是会员表里的在线时间的记录

从上面的程序可以看出,会员如果上次访问时间距离现在超过86400秒(一天),他才会更新会员表里的在线时间,但是他如果上次访问时间距离现在超过21600秒,那么他的上次访问时间又会被更新到现在,所以问题出现了,有的会员非常积极,每天必上论坛,这时候他的上次活跃时间永远不会距离现在超过86400秒,因为在距离21600秒的时候就会被更新了,所以对于每天必上论坛的人来说,他的帖子里的在线时间永远不会更新

TOP

经过验证,这种方法确实可以解决这个问题。

TOP

if($oltimespan && $discuz_uid && $lastactivity
        && $timestamp - ($lastolupdate ? $lastolupdate : $lastactivity) > $oltimespan * 60) {
                $lastolupdate = $timestamp;
                $db->query("UPDATE {$tablepre}onlinetime SET total=total+'$oltimespan', thismonth=thismonth+'$oltimespan', lastupdate='$timestamp' WHERE uid='$discuz_uid' AND lastupdate<='".($timestamp - $oltimespan * 60)."'");
                if(!$db->affected_rows()) {
                        $db->query("INSERT INTO {$tablepre}onlinetime (uid, thismonth, total, lastupdate)
                                VALUES ('$discuz_uid', '$oltimespan', '$oltimespan', '$timestamp')", 'SILENT');
                }
        }
设置的$oltimespan是30分钟,也就是没30分钟更新一次用户在线时长。 还有就是,有的用户有"良好的习惯",每次关闭浏览器时都是先在论坛中“退出”再关闭浏览器,下次上论坛在重新登录。
discuz论坛更新时长的机制是:
1,用户登录时更新members表中的lastactivity为当前时间
2,每次有页面访问看$discuz_uid判断是否已经登录,再看$lastolupdate和$lastactivity,如果到当前的时间差大于$oltimespan就更新该用户的在线时长。
3,用户点击“退出”时,直接清空cookie,不判断是否要更新时长 这对那些拥有“良好习惯”的用户就显得很不公平了,如果连续活跃(浏览帖子或发帖等)时间不足$oltimespan,虽然在足够时间后才点击“退出”论坛的,可是在线时间没能更新,再次上论坛时cookie已被清空需要再次登录,又丧失了一次更新时长的机会。

TOP

发新话题