1.cookieがsetされていればreturn user, setされていなければnew user
2.new userの場合、document.referrerで、リファラーを取得
3.cookieがsetされていれば、sessionのlocation.pathnameでリファラーを取得
4.cookieがsetされていれば、sessionのunixtimeの差でページ滞在時間を取得
var unix = Math.floor((new Date()).getTime()/1E3); var data = '{"path":"'+location.pathname+'", "time":"'+unix+'"}'; var visit = "new user<br>"; 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)]; } document.cookie="_na=NA1."+id+"."+unix+";"; window.sessionStorage.setItem(['ScribeTransport'],[data]); document.write(visit); document.write("リファラー" + document.referrer + "<br>"); } else { visit = "returned user<br>"; document.write(visit); var a = window.sessionStorage.getItem(['ScribeTransport']); b = JSON.parse(a); var unix = Math.floor((new Date()).getTime()/1E3); document.write("リファラー" + b.path + "<br>"); document.write("滞在時間" +(unix - b.time)+ "秒"); window.sessionStorage.setItem(['ScribeTransport'],[data]); } }else{ window.sessionStorage.setItem(['ScribeTransport'],[data]); }
あれ、待てよ、cookieがsetされていても、sessionがsetされていないパターンもあるな。
if(a)と書き換えます。cookieのexpireは1000*3600*24*365*2(730日)とします。
var unix = Math.floor((new Date).getTime()/1E3); var visit = "new user<br>"; 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(); document.write(visit); document.write("リファラー" + document.referrer + "<br>"); } else { visit = "returned user<br>"; document.write(visit); var a = window.sessionStorage.getItem(['ScribeTransport']); if(a){ b = JSON.parse(a); document.write("リファラー" + b.path + "<br>"); document.write("滞在時間" +(unix - b.time)+ "秒"); } } } var data = '{"path":"'+location.pathname+'", "time":"'+unix+'"}'; window.sessionStorage.setItem(['ScribeTransport'],[data]);
次は、このnew user・return user, リファラー, 滞在時間のデータを、サーバー側(ここではdoubleclick.php)に渡すところですね。