设为首页收藏本站繁体中文

轻之国度

 找回密码
 注册(右键在新窗口打开)

QQ登录

只需一步,快速开始

查看: 7204|回复: 59
收起左侧

[其他] 关于论坛在线时间(To be continued)

 关闭 [复制链接]
发表于 2011-6-20 21:03 | 显示全部楼层 |阅读模式
本帖最后由 tippisum 于 2011-7-21 08:23 编辑

最近在线时间的计算又一次出现了一些问题,因为论坛再次进行了补丁升级……请耐心等待……马上就会好的……
(说明:在线时间的问题是 DZX 的 BUG,而官方至今没有修正这个 BUG)
-----
经过了艰苦的努力,轻之国度的在线时间问题终于进行了完整的修正……So that's final. 从现在开始大家应该不会再需要因为在线时间的计算问题而烦恼了。

说明:在线时间的计算方式已经修正为和论坛系统升级之前尽可能一致。
在不同的 IP 或不同的浏览器上登录现在不会对在线时间的正常计算产生影响
个人资料中的在线时间更新方式调整为和论坛系统升级前一致,即用户登录时更新数据

感谢参与测试的会员:
therion,weer,nix9999,ajohnson1231


如果发现在线时间的计算或者数据更新仍然有问题或者疑问,可以继续在本帖回复提出。
感谢大家对轻国的支持。
-----
更新:由于论坛系统进行了安全补丁升级,之前提交的在线时间修正暂时无效了……(恢复到了 Discuz! X2 原来的计算方式)
当然问题还是原来的问题……请等待修复……

-----
再次更新:
修正已经重新提交……如有问题请在此报告
说明:由于某个小 BUG 导致重新登录时在线时间清零,目前已经修复,请再次重新登录,在线时间即可恢复正常。
发表于 2011-6-20 23:17 | 显示全部楼层
discuz! x2
DB::query("UPDATE ".DB::table('common_onlinetime')."
                                SET total=total+'$oltimespan', thismonth=thismonth+'$oltimespan', lastupdate='" . TIMESTAMP . "'
                                WHERE uid='{$_G['uid']}'");
discuz! 7.2
$db->query("UPDATE {$tablepre}onlinetime SET total=total+'$oltimespan', thismonth=thismonth+'$oltimespan', lastupdate='$timestamp' WHERE uid='$discuz_uid' AND lastupdate<='".($timestamp - $oltimespan * 60)."'");

 楼主| 发表于 2011-6-20 23:36 | 显示全部楼层
weer 发表于 2011-6-20 23:17
discuz! x2
DB::query("UPDATE ".DB::table('common_onlinetime')."
                                SET total=total+'$oltimespan', ...

这两个其实是一样的……(7.2 的在线时间也是有缓存的)

从 onlinetime 表更新个人资料的语句在下面:
  1.                 if($_G['uid'] && TIMESTAMP - $ulastactivity > 21600) {
  2.                         if($oltimespan && TIMESTAMP - $ulastactivity > 43200) {
  3.                                 $total = DB::result_first("SELECT total FROM ".DB::table('common_onlinetime')." WHERE uid='$_G[uid]'");
  4.                                 DB::update('common_member_count', array('oltime' => round(intval($total) / 60)), "uid='$_G[uid]'", 1);
  5.                         }
  6.                         dsetcookie('ulastactivity', authcode(TIMESTAMP, 'ENCODE'), 31536000);
  7.                         DB::update('common_member_status', array('lastip' => $_G['clientip'], 'lastactivity' => TIMESTAMP, 'lastvisit' => TIMESTAMP), "uid='$_G[uid]'", 1);
  8.                 }
复制代码
从代码里面就可以看出来了……在线时间更新的要求就是 TIMESTAMP(服务器当前时间)和 $ulastactivity(上次访问页面的时间)相差超过 43200 秒(12 小时)以上
发表于 2011-6-20 23:43 | 显示全部楼层
重点是
  1. AND lastupdate<='".($timestamp - $oltimespan * 60)."'");
复制代码
吧。。
在线时间的表是common_onlinetime
你给的代码完全没对这个表进行更新。。
发表于 2011-6-20 23:59 | 显示全部楼层
问一下..应该可以把12小时不登陆里面的12小时修改一下的吧
修改为1小时或以下的对比起现在就不会太麻烦了
 楼主| 发表于 2011-6-21 00:13 | 显示全部楼层
weer 发表于 2011-6-20 23:43
重点是吧。。
在线时间的表是common_onlinetime
你给的代码完全没对这个表进行更新。。

你错了……common_onlinetime 这个是缓存表……在 X2 里面顺便用来作为排行榜的数据源……

你在自己的个人资料里看到的在线时间是来自于 common_member_count 表(7.x 中是 members 表)
关于这一点如果你不信的话自己去看看 Discuz 的数据库表结构就知道了……
发表于 2011-6-21 00:41 | 显示全部楼层
虽然论坛今晚的网络很卡,不过基本上还不影响火狐的RELOAD EVERY插件功能。
设置上我还是沿用前几天一贯的方式,不过不同的是2011-6-21 00:11更新的排行榜中在线时间只增加了一小时。
我想问一下oltimespan的大小还是10分钟吗?是不是有过改动?
 楼主| 发表于 2011-6-21 00:48 | 显示全部楼层
nix9999 发表于 2011-6-21 00:41
虽然论坛今晚的网络很卡,不过基本上还不影响火狐的RELOAD EVERY插件功能。
设置上我还是沿用前几天一贯的 ...

oltimespan 一直是 20 分钟……
你被成功累计的在线时间只有 3 次……这三条日志记录已经发给你了,
TIME 用的是 Unix 时间戳函数(自 1970 年 1 月 1 日 0 时开始计算的秒数),想知道具体时间的话就随便拿个计算器或者现成换算程序换算一下吧

顺便表示今天的在线时间代码已经被我打了一个补丁……预计至少修复了多 IP 重复登录的问题……
至于同 IP 的问题……还需要进一步观察。
发表于 2011-6-21 00:55 | 显示全部楼层
既然 个人资料里面的时间 不离线12小时就不能被更新的话.
那排行榜里面的时间 是 准确的吗?

总觉得.我一直挂着.. 但是.
时间的增长很奇怪. 和后面的同志 时间之差越缩越短了..  短的离奇
发表于 2011-6-21 00:58 | 显示全部楼层
tippisum 发表于 2011-6-21 00:48
oltimespan 一直是 20 分钟……
你被成功累计的在线时间只有 3 次……这三条日志记录已经发给你了,
TI ...

同IP的问题是不是还包含了同一个IP不同的session这种情况?

那三次情况我看到了,有点费解,为什么10分钟的自动刷新时间没有被计算在内这一现象。
不过大概是托这个的福,被系统当成了离线状态,配合去掉了一个0的43200,我总算是在个人资料里看到自己的在线变动了...
 楼主| 发表于 2011-6-21 01:02 | 显示全部楼层
nix9999 发表于 2011-6-21 00:58
同IP的问题是不是还包含了同一个IP不同的session这种情况?

那三次情况我看到了,有点费解,为什么10分 ...

不同 session 的情况(或者说明显属于不同 session,如不同的浏览器),应该已经被修正掉了。
换句话说如果有遗漏的话应该就是“本应该是同 session 却变成了不同 session”,或者“同 session 的在线计算还是有问题”这两种中的一种……
发表于 2011-6-21 01:08 | 显示全部楼层
tippisum 发表于 2011-6-21 01:02
不同 session 的情况(或者说明显属于不同 session,如不同的浏览器),应该已经被修正掉了。
换句话说如 ...

这么说实际上已经解决了两个明显的问题了,接下来就是那个不确定的第三种情况喽。


tippisum  现在的情况是两个都不对……这是最要命的一点。要不然我们总是可以简单地只取一个然后把另一个甩掉。正在尝试各种方法查找出问题的具体原因以及修复方式。  发表于 2011-6-21 00:58

两个都不对是什么情况?个人资料那个我能理解,因为更新速度永远要慢一拍;那么排行榜上的数据呢?那个也是不对应在线计算的吗?
发表于 2011-6-21 01:10 | 显示全部楼层
nix9999 发表于 2011-6-21 01:08
这么说实际上已经解决了两个明显的问题了,接下来就是那个不确定的第三种情况喽。

. 总排行上的. 不知道对不对.
月排行上的 肯定不对. . 那个时间一计算 就觉得怪了.
发表于 2011-6-21 01:16 | 显示全部楼层
习惯online 发表于 2011-6-21 01:10
. 总排行上的. 不知道对不对.
月排行上的 肯定不对. . 那个时间一计算 就觉得怪了.

我很赞同,月排行榜上的计算有误,这个是已经确定的问题了。

不过我是想问前20位的个人在线时间是不是以月排行榜上的数据为标准的(即使那是错误的结果)
发表于 2011-6-21 01:21 | 显示全部楼层
nix9999 发表于 2011-6-21 01:16
我很赞同,月排行榜上的计算有误,这个是已经确定的问题了。

不过我是想问前20位的个人在线时间是不是 ...

觉得应该 不是..

个人认为. 应该是.论坛开通时 就已经有被凭空附加上去的时间.
后面 有修复过一次. 之后的应该是正常挂机的时间..吧
发表于 2011-6-21 07:09 | 显示全部楼层
本帖最后由 therion 于 2011-6-21 07:16 编辑

謝謝版主辛苦了,把事情調查的水落石出~

不過我沒有連續離開1.2小時再登錄論壇,
在線時間剛才也發現暴增了!從353小時 一氣變成=> 959小時
從上上禮拜新論壇恢復,6/14到現在,
雖然幾乎一整個禮拜都有掛著,最多也是增加24X7=168小時,卻暴增了606小時
(還有上禮拜數據好像被恢復過,所以實際掛的時間應該是從恢復那時候算到現在)

電腦Winows XP,用過Opera 及 Chorme瀏覽器,
15分鐘刷新水區一次,或5分鐘刷新個人空間一次,
其他沒有什麼特殊的動作。
发表于 2011-6-21 11:30 | 显示全部楼层
那个…360和IE这两个同为IE核心的浏览器,一个刷新、一个浏览其他页面,应该不会导致“现在如果频繁切换使用不同的浏览器或者 IP 地址(或者说,使用不同的 cookie)登录同一个帐号,在线时间将不会增加”的状况吧…
发表于 2011-6-21 12:43 | 显示全部楼层
嗯,cookie是相同的
www和bbs分别只能登上一个号
看来不用担心了
发表于 2011-6-21 22:51 | 显示全部楼层
不知道为什么更新之后到现在,在线一直不动



    在线时间14364 小时
    注册时间2008-4-15 15:40
    最后访问2011-6-17 23:20
    注册 IP121.32.75.168 - - 广东广州
    上次访问 IP183.6.150.99 - - 广东广州
    上次活动时间2011-6-17 23:20
    上次发表时间2011-6-17 23:43
    所在时区(GMT +08:00) 北京, 香港, 帕斯, 新加坡, 台北
---
6月18日0时数据


到现在为止在线都没有变过,已经退出几次再从新登陆了,每次都超过了1.2小时,
难道是因为BBS现在不算在线了呢?
 楼主| 发表于 2011-6-22 04:13 | 显示全部楼层
34342369 发表于 2011-6-21 22:51
不知道为什么更新之后到现在,在线一直不动

你再重新登录一下试试看

本版积分规则

手机版|Archiver|轻之国度

JS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!JS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!

  

GMT+8, 2024-5-16 18:05

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表