- 論壇徽章:
- 0
|
Discuz!X2論壇 “在線時間”更新問題
最近做一個論壇,其實DZ并不是多難,目錄結(jié)構(gòu)以及命名都比較規(guī)范。就是后臺稍微有點復雜,遇到問題去www.discuz.net搜索幾乎都能找打答案。
不過,這個問題比較麻煩,就是會員“在線時間”更新的問題。有時候不更新,一直為零,下面找出更新時間的函數(shù)吧
在根目錄/source/function/function_core.php這個文件中,函數(shù)就是updatesession()這個函數(shù),看這個函數(shù)的最后一部分,這是關(guān)鍵的地方,更新用戶在線時間相關(guān)的兩張表;pre_common_member_count和pre_common_member_status- 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 dsetcookie('ulastactivity', authcode(TIMESTAMP, 'ENCODE'), 31536000);
- 6 }
- DB::update('common_member_status', array('lastip' => $_G['clientip'], 'lastactivity' => TIMESTAMP, 'lastvisit' => TIMESTAMP), "uid='$_G[uid]'", 1)
- 8 }
復制代碼 可以看到,當用戶上線的時候,當前服務器時間減去上次活動時間大于21600秒也就是6個小時的時候,把這個定義為狀態(tài)一,那么,在狀態(tài)一下將更新pre_common_member_status表中當前用戶的活動時間和訪問時間等等;
當滿足狀態(tài)一條件的時候,如果當前服務器時間減去上次活動時間大于43200秒也就是12個小時的時候更新表pre_common_member_count,就是在這里更新在線時間的。
想要更新的速度更快更精確,那么就把這兩個時間調(diào)小,比如一個小時或者兩個小時更新一次,這個根據(jù)需要了。
PS:更新時間調(diào)小也就意味更新頻率加大,增加服務器的負擔,可以在前面加上時間段的判斷,或者在線用戶多少的判斷,根據(jù)綜合因素調(diào)整更新時間間隔。
|
|