前端 stat.js

// JavaScript Document
/**
 *  浏览器统计脚本
 */
var xmlHttp;
var statdomain='http://www.logs.com';
var statIdName = "logId";
function setCookie(name,value)
{
    var exp = new Date();
    exp.setTime(exp.getTime() + 24*60*60*1000);
    document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
//读取cookies
function getCookie(name)
{
    var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
    if(arr=document.cookie.match(reg))
        return unescape(arr[2]);
    else
        return null;
}
//删除cookies
function delCookie(name)
{
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval=getCookie(name);
    if(cval!=null)
        document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
/**
* 获取当前时间戳
*/
function getTimestamp() {
 var timestamp = Date.parse(new Date());
 return timestamp;
}
function generRandom(){
    return Math.round(Math.random() * 3000000000);
}
/**
* 生成statId
*/
function genStatId() {
 var cookieId = getTimestamp();
 cookieId = "cid" + "-" + cookieId + "-" + generRandom();
 return cookieId;
}
/**
* 设置StatId
*/
function setStatId() {
 var cookieId = genStatId();
 setCookie(statIdName, cookieId);
}
/**
* 获取StatId
*/
function getStatId() {
 var statId = getCookie(statIdName);
 if (statId != null && statId.length > 0) {
  return statId;
 } else {
  setStatId();
  return getStatId();
 }
}
/**
 * 获取UA
 */
function getUA() {
  var ua = navigator.userAgent;
  if (ua.length > 250) {
    ua = ua.substring(0, 250);
  }
  return ua;
}
function getBrower() {
  var ua = getUA();
  if (ua.indexOf("MSIE") >= 0) {
    var ver=ua.match(/MSIE ([\d.]+)/)[1];
    return "IE("+ver+")";
 }
 //Maxthon
 else if (ua.indexOf("Maxthon") >= 0) {
    var ver=ua.match(/Maxthon\/([\d.]+)/)[1];
    return "Maxthon("+ver+")";
 }
 //firefox
 else if (ua.indexOf("Firefox") >= 0) {
    var ver=ua.match(/Firefox\/([\d.]+)/)[1];
    return "Firefox("+ver+")";
 }
 //Chrome
 else if(ua.indexOf("Chrome") >= 0){
     var ver=ua.match(/Chrome\/([\d.]+)/)[1];
     return "Chrome("+ver+")";
 }
 //Opera
 else if(ua.indexOf("Opera") >= 0){
     var ver=ua.match(/Opera.([\d.]+)/)[1];
     return "Opera("+ver+")";
 }
 //Safari
 else if(ua.indexOf("Safari") >= 0){
     var ver=ua.match(/version\/([\d.]+)/)[1];
     return "Safari("+ver+")";
 }else{
     return "ot";     
 }
}
/**
 * 获取浏览器语言
 */
function getBrowerLanguage() {
  var lang = navigator.browserLanguage;
  return lang != null && lang.length > 0 ? lang : "";
}
/**
 * 获取操作系统
 */
function getPlatform() {
  return navigator.platform;
}
/**
 * 获取页面title
 */
function getPageTitle() {
  return document.title;
}
/**
 * 构造XMLHttpRequest对象
 *
 * @return
 */
function createXMLHttpRequest() {  
  if (window.ActiveXObject) {  
    xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');  
  } else if (window.XMLHttpRequest) {  
    xmlHttp = new XMLHttpRequest();  
  }  
}
var logrand=generRandom();//同一用户页面记录id
function InitLE(stat_param,isclose) {
  var UA = encodeURIComponent(getUA());
  var REFURL = encodeURIComponent(document.referrer);
  var URL = encodeURIComponent(document.URL);
  var ScreenX = screen.width;
  var ScreenY = screen.height;
  var OS = getPlatform();
  var Brower = getBrower();
  var BrowerLanguage = getBrowerLanguage();
  var PageTitle = encodeURIComponent(getPageTitle());
  var Action = statdomain+"/stat.gif?rd="+generRandom();
  //var Action = statdomain+"/api.php?op=addlogs&rd="+generRandom();
  var CookieId = getStatId();
  var p = stat_param + "&isclose="+ isclose +"&stat_cookieid=" + CookieId + "&stat_randid=" + logrand +"&stat_ua=" + UA + "&stat_referurl="
      + REFURL + "&stat_url=" + URL + "&stat_os=" + OS + "&stat_browser=" + Brower + "&stat_desc=" + PageTitle;
  createXMLHttpRequest();
  xmlHttp.open("GET", Action+'&'+p,false);
  xmlHttp.send(null); //设置为发送给服务器数据
 
}
InitLE(stat_param,0);
window.onbeforeunload = function(){
   InitLE(stat_param,1);
}


后端php代码

defined('IN_LOGS') or exit('No permission resources.');
ignore_user_abort(TRUE);
logs_base::load_sys_class('Log', '', 0);
$Log = Log::factory('file', ROOT_PATH . 'api' . DIRECTORY_SEPARATOR .'logs'.DIRECTORY_SEPARATOR.'addlogs'.DIRECTORY_SEPARATOR . date('Ymd') . '.log', 'Request', array('timeFormat' => '%Y-%m-%d %H:%M:%S'));
//set_time_limit(0);//取消脚本执行延时上限    
$db=logs_base::load_model();
$allow_origin=array();
$sites=$db->select('site','*');
foreach($sites as $k=>$v){
    $allow_origin[]=$v['siteurl'];
}
$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';
$Log->log('origin:' .$origin);
if(in_array($origin, $allow_origin)){
    header('Access-Control-Allow-Origin:'.$origin);  
    header('Access-Control-Allow-Credentials:true');
}
$Log->log('SRART DATA');
$post=$_REQUEST;
header("Content-type: p_w_picpath/gif");
$imgpath=ROOT_PATH.'stat.gif';
echo file_get_contents($imgpath);
if($origin && $origin!='http://'.SITE_URL && !in_array($origin,$allow_origin)){
    exit();    
}
if($post){
    $prex='stat_';
    $Log->log('POST DATA:' .array2string($post));
    $key=logs_base::load_config('system', 'auth_key');
    $decode=sys_auth($post[$prex.'ld'], 'DECODE',$key);
    if(!in_array($decode,$allow_origin)){
        exit();//非法请求!
    }
    $siteid=0;
    foreach($sites as $k=>$v){
        if($v['siteurl']===$decode){
            $siteid=$v['id'];
            break;
        }
    }
    if(!$siteid)exit();//'非法请求!'
    $gifo=logs_base::load_sys_class ('get_gust_info');
    $shortname=$db->get('site','shortname',array('id'=>$siteid));
    if(!$shortname)exit();//没有设置记录表
    $loglist_table='loglist_'.$shortname;
    $fields=array('actid',//'功能点id'
        'doids',//'操作对象id'
        'dodesc',//'操作对象描述'
        'system',//'操作系统'
        'intime',//'进入时间'
        'outtime',//'离开时间'
        'standtime',//'停留时间'
        'browser',//'浏览器',
        'ip',//'ip',
        'userid',//'用户id'
        'companyname',//'公司名称'
        'url',//'当前url地址'
        'referurl',//'来源url'
        'desc',//'描述',
        'cookieid',
        'randid'
    );
    $data=array();
    foreach($fields as $field){
        if(isset($post[$prex.$field]) && $post[$prex.$field])$data[$field]=$post[$prex.$field];
    }
    $Log->log('do table:' .$loglist_table);
    if($data){
        if(!isset($data['intime']) || !$data['intime'])$data['intime']=time();
        if(!isset($data['system']) || !$data['system'])$data['system']=$gifo->GetOs();//操作系统
        if(!isset($data['browser']) || !$data['browser'])$data['browser']=$gifo->GetBrowser();//浏览器类型
        if(!isset($data['ip']) || !$data['ip'])$data['ip']=$gifo->Getip();
        if(!isset($data['address']) || !$data['address'])$data['address']=$gifo->GetAddress();
        if(!isset($data['referurl']) || !$data['referurl'])$data['referurl']=HTTP_REFERER;
        
        if($post['isclose'] && $data['cookieid'] && $data['randid']){
            $Log->log('update table:' .$data['cookieid'].'|'.$data['randid']);
            $preinfo=$db->get($loglist_table,array('id','intime'),array('cookieid'=>$data['cookieid'],'randid'=>$data['randid'],'ip'=>$data['ip'],'outtime'=>0));
            if($preinfo){
                $outtime=time();
                $standtime=$outtime-$preinfo['intime'];
                $db->update($loglist_table,array('outtime'=>$outtime,'standtime'=>$standtime),array('id'=>$preinfo['id']));
                $Log->log('END DATA');
                exit();    
            }
        }
        $Log->log('insert DATA:' .array2string($data));
        $db->insert($loglist_table,$data);
    }
    $Log->log('END DATA');
}
?>