mongodbにトラッキング情報をinsert

挿入するのは、アクセス日時、ip、新規・2回目以降のユーザー、cookieのユニークID、リファラー、前ページの平均滞在時間、閲覧ページ

datasetは以下のような連想配列
[“date”]=> string(19) “2018-04-15 23:12:01” [“ip”]=> string(12) “192.168.33.1” [“visit”]=> string(13) “Returned User” [“cookie”]=> string(10) “a167mn677r” [“referrer”]=> string(9) “/view.php” [“avgtime”]=> string(2) “25” [“page”]=> string(9) “/view.php”

na.js
配列のkeyの名称は、google analyticsの言語をEnglish USにして参考にネーミング

var unix = Math.floor((new Date).getTime()/1E3);
var visit = "New User";
if(navigator.cookieEnabled){
    var all=document.cookie + ";";
    var cStart = all.indexOf("_na=",0);
    if(cStart == -1){   
        var char = "abcdefghijklmnopqrstuvwxyz123456789";
        var id = "";
        for(var i=0; i<10; i++){
            id += char[Math.floor(Math.random()*35)];
        }
        var expire = new Date();
        expire.setTime(expire.getTime() + 1000*3600*24*365*2);
        document.cookie="_na=NA1."+id+"."+unix+";expires=" + expire.toUTCString();
        a.push(['cookie',id]);
        a.push(['vist',visit]);
        a.push(['referrer',document.referrer]);
    } else {
        visit = "Returned User";
        a.push(['visit',visit]);
        var cEnd = all.indexOf(";",cStart);
		var cID = all.substring(cStart+8,cEnd - 11); //_na=NA1.0000000000.
		a.push(['cookie',cID]);
        var c = window.sessionStorage.getItem(['ScribeTransport']);
        if(c){
            d = JSON.parse(c);
            a.push(['referrer',d.path]);
            a.push(['avgtime',(unix - d.time)]);        
        }       
    }
}
var data = '{"path":"'+location.pathname+'", "time":"'+unix+'"}';
window.sessionStorage.setItem(['ScribeTransport'],[data]);

a.push(['page',location.pathname]);
$(function(){
    $(document).ready(function(){
            var postData = {"userdata": a};
            $.post(
                "doubleclick.php",
                 postData,
                 function(data){
                    $(".box").html(data);
                }
            );
        });
});

doubleclick.php
1.アカウントIDをmongoのcollection名にしたいので、postされたデータから、アカウントIDのみ切り抜いて、array_spliceでそれ以降をdata setにする。
2.連想配列をmongodbにinsert

$data = array("date"=>date("Y-m-d H:i:s"));
$audience = $_POST['userdata']; 
$mongo = "app.na".$audience[0][1];
$audience = array_splice($audience, 1);
foreach($audience as $value){
	$data += array($value[0]=>$value[1]); 
}
var_dump($data);

$mng = new MongoDB\Driver\Manager("mongodb://localhost:27017");
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->insert($data);
$mng->executeBulkWrite($mongo, $bulk);

echo "finished!!!";

うおお、上手く入っている。嬉し~

同じcookie、異なるセッションでアクセスします。

あれ、待てよ、なんか違う気がしてきた。
セッションにもユニークなID発行するべきなんじゃないか...?
ちょっと混乱してきたが、queryのviewを作りながら修正していきましょう。