在本站坛子里潜了一段时间发现了一个大家都一直最头痛的事情就是本站的在线时间一直不准确,在线五六个小时只计二三个小时,部分会员最想痛哭的是潜水怎么长时间了,可在线时间还是0,心里那个不爽啊,本人也是如此呀,一个版主在线时间居然是0,这是一件多么没面子的事呀,不过现在不用担心了,经过本人半天的时间,终于发现了问题,这不下面给出解决方案,请管理员在修改之前,做好文件备份工作,以免。。。哈哈就不多说了。
1、误差不超过5分钟(即系统每5分钟增加一次在线时间,如果你想每10分钟,就把其中的300改成600)
需要修改以下文件:
global.php
找到函数
function User_info(){
将函数下$db_onlinetime替换为300就可以了.
function User_info(){
global $db,$timestamp,$db_onlinetime,$winduid,$windpwd,$db_ifonlinetime,$c_oltime,$onlineip,$db_ipcheck,$tdtime;
$ct='';
$detail =$db->get_one(\"SELECT m.uid,m.username,m.password,m.email,oicq,m.groupid,m.memberid,m.regdate,m.timedf,m.style,m.datefm,m.t_num,m.p_num,m.yz,m.newpm,m.showsign,m.payemail,md.postnum,md.rvrc,md.money,md.credit,md.currency,md.lastvisit,md.thisvisit,md.onlinetime,md.lastpost,md.todaypost,md.onlineip,md.uploadtime,md.uploadnum,md.editor,md.starttime FROM pw_members m LEFT JOIN pw_memberdata md USING(uid) WHERE m.uid='$winduid'\");
if(strpos($detail['onlineip'],$onlineip)===false){
$iparray=explode(\".\",$onlineip);
if(strpos($detail['onlineip'],$iparray[0].'.'.$iparray[1])===false) $loginout='Y';
}
if(!$detail || PwdCode($detail['password']) != $windpwd || ($loginout=='Y' && $db_ipcheck==1)){
unset($detail);
$GLOBALS['groupid']='guest';
require_once(R_P.'require/checkpass.php');
Loginout();
Showmsg('ip_change');
}else{
unset($detail['password']);
if($timestamp-$detail['thisvisit']>300){
if(!GetCookie('hideid')){
$ct=\"lastvisit=thisvisit,thisvisit='$timestamp'\";
$detail['lastvisit'] = $detail['thisvisit'];
$detail['thisvisit'] = $timestamp;
}
if($db_ifonlinetime == 1 && $ct && $c_oltime > 0){
if($c_oltime > 300*1.2){
$c_oltime = 300;
}
$ct .= \",onlinetime=onlinetime+'$c_oltime'\";
$c_oltime = 0;
}
$ct && $db->update(\"UPDATE pw_memberdata SET $ct WHERE uid='$winduid' AND $timestamp-thisvisit>300\");
}
}
return $detail;
}
2、还有就是cookie问题,因为在线时间是通过cookie来增加的(这里就简单的说一下,会语言的朋友都懂)
当你的IE缓存存满时有于论坛的本身BUG cookie可能会不被存贮,所以有必要要对你的IE缓存进行清理:
打开IE---internet选项---“删除cookie”--“删除文件(脱机内容也删) ”。
如果你的机器硬盘大一些,可以将“使用磁盘”放大到500,或者1000。。
关于这个我特意经过实验的! 证实了,在线时间不涨的部分原因是你的磁盘被页面文件占满了!不删除的话不会再刷新记录!所以,导致一部分人涨时间,一部分不涨!
也可以在论坛底部增加一个“清除cookie”的按钮
增加“清除cookie”方法:
打开 profile.php
搜索
?>
在上面加入
//cookie清除
if($action == 'clearcookies') {
foreach ($_COOKIE as $c_key => $c_val){
setcookie($c_key, '', $timestamp - 86400 * 365, $db_ckpath, $db_ckdomain);
}
refreshto(\"index.php\",'operate_success');
}
///cookie清除结束
打开 footer.htm
搜索
<span class=\"f12 fl\">{$GLOBALS['db_foot']}</span><a href=\"$db_ceoconnect\">Contact us</a>
在前面加入
<a href=\"profile.php?action=clearcookies\">清除Cookies</a>
管理员也可先试试在后台里把在线用户时限(多少分钟内有动作视为在线):把这个设置得小一点。 |