기본적으로, 나는 내 사이트의 활성 사용자 수를 정확하게 측정하려고 노력하고 있습니다. DB에서 세션을 추적하고 있으며 봇/스파이더/크롤러를 제거하기 위해 USER_AGENT를 기반으로하는 정리 작업도 수행합니다 (매우 기본적인 작업 임). 동일한 IP에 대해 중복 세션을 제거한 후에도 매우 많은 수의 세션이 있습니다. 실제로 세션 수는 Google 애널리틱스 및 기타 사용자 추적 시스템에서보고하는 것보다 10 배 더 많으므로 내가 잘못하고있는 일이있을 것입니다.활성 사용자를 정확히 계산 하시겠습니까? (PHP + MySQL)
//Start session if not active already
if(!isset($_SESSION)){
session_start();
}
//Determine whether bot or browser
$bots = array(
'bot',
'crawler',
'yahoo',
'spider',
'google',
'$^'
);
$ua = $_SERVER['HTTP_USER_AGENT'];
$uam = preg_match('/'.implode('|', $bots).'/i', $ua);
$uatype = ($uam)?'bot':'browser';
//Add session to DB if new or expired
if ($_SESSION['renew'] < time() || !isset($_SESSION['renew'])) {
$_SESSION['renew'] = time() + 900; //15 minutes
$sql = "INSERT INTO " . SESSIONS . " (session_id, user_id,
renew, user_ip, type, useragent) VALUES ('" . session_id() . "',
'" . $myuser->get('user_id') . "', " . $_SESSION['renew'] . ",
'" . $myuser->get('ip') . "', '$uatype', '$ua')
ON DUPLICATE KEY
UPDATE renew = " . $_SESSION['renew'] . ",
user_id = '" . $myuser->get('user_id') . "'";
$site_db->query($sql);
$sql = 'DELETE FROM ' . SESSIONS . '
WHERE renew < ' . time();
$site_db->query($sql);
}
그래서, DB에 세션 정보를 저장하고있어 다음 필요에 따라 매 15 분마다 만료/갱신 : 나는 세션을 추적 곳
다음은 코드의 일부입니다.
그런 다음 DB에서 고유 한 IP 주소를 사용하는 브라우저의 세션을 쿼리하면 JS 시스템이보고하는 수의 약 10 배가됩니다. IP 주소의 처음 두 옥텟이 고유 한 항목 만 계산하여 번호를 줄이려고해도 여전히 끝났습니다.
내 세션 추적에서 내가 잘못 할 수있는 것에 대한 조언이 있습니까? 카운트를 얻을 수
쿼리는 다음과 같이 진행됩니다 참고로
$sql = "SELECT count(DISTINCT(user_ip) FROM ".SESSIONS." WHERE type = 'browser'";
는, 봇 트랩이 이미 세션의 약 66 %를 폐기된다. 그렇게하지 않으면 GA 보고서의 40 배나 많은 "활성 사용자"가 될 것입니다.
감사합니다.
고유/기본 필드는 무엇입니까? –
session_id는 SESSIONS 테이블의 기본 키입니다. – ignaciogc