cookieの読み込み

document.cookieでcookieを全て取得します。

console.log(GetCookie('key1'));
function GetCookie(name){
	var result = null;

	var cookieName = name + '=';
	var allcookies = document.cookie;

	var position = allcookies.indexOf(cookieName);
	if(position != -1){
		var startIndex = position + cookieName.length;
		var endIndex = allcookies.indexOf(';', startIndex);
		if(endIndex == -1){
			endIndex == allcookies.length;
		}

		result = decodeURIComponent(allcookies.substring(startIndex, endIndex));
	}
	return result;
}

indexOfは全文検索。allcookieの中で、key3=のポジションを取得
indexOf(‘hoge’, n) は、nの位置から、hogeを全文検索
つまり、indexOf(‘;’, 308)は、308以降の次の’;’を検索
allcookie.substring()で、valueを切り抜いています。

console.log(document.cookie);
console.log(document.cookie.indexOf('key3=')); //position
console.log(308); // start index 
console.log(document.cookie.indexOf(';', 308)); // end index 311
console.log(document.cookie.substring(308, 311));

cookieの書き込み

phpはsetcookie, jsはdocument.cookie

<?php
setcookie("key1", "value1")
?>
<script>
	document.cookie = 'key2=value2';
</script>

有効期限を設定

<script>
	var key = 'fsa';
	var expire = new Date();
	expire.setTime( expire.getTime() + 1000 * 3600 * 24 * 7);
	document.cookie = 'key=' + encodeURIComponent(key)+ '; path = /sample.php; expires = ' + expire.toUTCString();
</script>

アフィリエイトタグとコンバージョンタグの仕組みについて

例えば、VCで広告を作成すると、以下のようなタグは発行される
sidは個人のidで固定, pidは広告の種類によって異なるので、おそらく広告ごとのid?
リンク先がurlでパラメーターとして送られているので、getで取得してsid, pidを保存、setCookieして、設定されたURLリダイレクトさせて、コンバージョンページに行ったら、jsで処理しているのか??

<script language="javascript" src="//ad.jp.ap.valuecommerce.com/servlet/jsbanner?sid=xxxxxxx&pid=yyyyyyyyy"></script><noscript><a href="//ck.jp.ap.valuecommerce.com/servlet/referral?sid=xxxxxxx&pid=yyyyyyyyy" target="_blank" rel="nofollow"><img src="//ad.jp.ap.valuecommerce.com/servlet/gifbanner??sid=xxxxxxx&pid=yyyyyyyyy" border="0"></a></noscript>

gaタグの挙動を理解する

最初gaタグは以下のような記述になっているかと思います。

<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-xxxxx-x']);
    _gaq.push(['_trackPageview']);
    (function() {

        var ga = document.createElement('script');
        ga.type = 'text/javascript';
        ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(ga, s);
    })();
</script>

ga.jsのダミーとして同じディレクトリにtest.jsを作ります。
test.js

console.log(obj[0]);

test.php
objの配列にidを入れて、test.phpからtest.jsを呼び込みます。

<script type="text/javascript">
    var obj = obj || [];
    obj.push('id:1');
    (function() {
        var sa = document.createElement('script');
        sa.type = 'text/javascript';
        sa.async = true;
        sa.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://') + '192.168.33.10:8000/test.js';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(sa, s);
    })();
</script>

配列のid:1がtest.jsに渡されて、console.logが実行されます。

test.jsの中身を以下に書き換えると

console.log(obj[0]);
console.log(location.pathname);

test.phpのlocation.pathnameが表示されます。

つまり、setAccountとtrackPageviewを配列としてga.jsに渡して、対象ページのユーザー情報、挙動やcookieをga.jsでcollectしているということですね。
  _gaq.push([‘_setAccount’, ‘UA-xxxxxx-x’]);
_gaq.push([‘_trackPageview’]);

あれ、もしかして、アフィリエイトのコンバージョンタグも同じ仕組み?? マジ?

Google Analyticsでip情報を取得する方法

Google Analytics -> 管理 -> プロパティ -> カスタム定義 -> カスタムディメンション をクリック
「+新しいカスタムディメンション」を押下

カスタム ディメンションを追加 で名前を追加
JavaScript(ユニバーサルアナリティクスのプロパティのみで有効)から、
ga(‘set’, ‘dimension1’, dimensionValue); をコピー

GA JSにdimension1 とphpのREMOTE_ADDRの情報を送る

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UAxxxxxx-xx', 'auto');
  ga('set', 'dimension1', <?php echo $_SERVER&#91;‘REMOTE_ADDR’&#93;; ?>);
  ga('send', 'pageview');

</script>

あとは、セカンダリディメンション・カスタムディメンションで指定した名前を見れば、ipアドレスを閲覧できますね。

ga.jsでは、タグから送られてきたdimension1とipアドレスを配列に入れて、processingしてgaにレポーティングいるだけですな。
なるほど!ga.jsはまだ途上だが、仕組み自体は少しづつ分かってきた!

javascriptでユーザー情報を取得

<script type="text/javascript">
document.write("HOST : " + location.host + "<br>");
document.write("HOSTNAME : " + location.hostname + "<br>");
document.write("PORT : " + location.port + "<br>");
document.write("REQUEST : " + location.pathname + "<br>");
document.write("CODE : " + navigator.appCodeName + "<br>");
document.write("BROWSER : " + navigator.appName + "<br>");
document.write("VERSION : " + navigator.appVersion + "<br>");
document.write("LANG : " + navigator.language + "<br>");
document.write("PLATFORM : " + navigator.platform + "<br>");
document.write("USERAGENT : " + navigator.userAgent + "<br>");
document.write("REFERER : " + document.referrer + "<br>");
document.write("DOMAIN : " + document.domain + "<br>");
document.write("SCREEN.W : " + screen.width + "<br>");
document.write("SCREEN.H : " + screen.height + "<br>");
document.write("SCREEN.COL : " + screen.colorDepth + "Bit" + "<br>");
</script>

ipアドレスがありませんね。
ga.jsでipに関する記述を見てみると、
line10: Xa=Va(“anonymizeIp”)
くらいしかみつけられません。

Google analyticsのユーザー エクスプローラはipアドレスではなく、ユーザー固有の数字のようです。

ga.js line80-84

どうしよう、これ?このレベルまでもっていかないとお話にならないんですか。。。

var d=new Image(1,1);
d.src=c+a;
d.onload=function(){
	d.onload=null;
	d.onerror=null;
	b()};
d.onerror=function(){
	d.onload=null;
	d.onerror=null;
	b()}},
ef=function(a,b){
	if(0!=Ne().indexOf(J.location.protocol))return!1;
var c=W.XDomainRequest;
if(!c)return!1;
c=new c;
c.open("POST",Ne()+"/p/__utm.gif");
c.onerror=function(){b()};
c.onload=b;
c.send(a);
return!0},df=function(a,b,c,d){
	var e=W.XMLHttpRequest;if(!e)return!1;
	var f=new e;
	if(!("withCredentials"in f))return!1;
	f.open("POST",c||Ne()+"/p/__utm.gif",!0);
	f.withCredentials=
!0;
f.setRequestHeader("Content-Type","text/plain");
f.onreadystatechange=function(){
	if(4==f.readyState){
		if(d)try{var a=f.responseText;
			if(1>a.length||"1"!=a.charAt(0))Ra("xhr","ver",a),b();else if(3<d.count++)Ra("xhr","tmr",""+d.count),b();
			else if(1==a.length)b();
			else{var c=a.charAt(1);
				if("d"==c){var e=d.gb;
					a=(a=b)||Fa;
					df("",a,"https://stats.g.doubleclick.net/j/collect?"+e,d)}
					else if("g"==c){var t="https://www.google.%/ads/ga-audiences?".replace("%","com");
					gf(d.google,b,t);
					var Za=a.substring(2);
					if(Za)if(/^&#91;a-z.&#93;{1,6}$/.test(Za)){var Ma=
"https://www.google.%/ads/ga-audiences?".replace("%",Za);gf(d.google,Fa,Ma)}else Ra("tld","bcc",Za)}else Ra("xhr","brc",c),b()}}catch(mb){b()}else b();
f=null}};
f.send(a);
return!0},Ee=function(a,b){if(!J.body)return We(function(){Ee(a,b)},100),!0;
a=encodeURIComponent(a);
try{
	var c=J.createElement('<iframe name="'+a+'"></iframe>')}catch(e){c=J.createElement("iframe"),c.name=a}c.height="0";
	c.width="0";
	c.style.display="none";
	c.style.visibility="hidden";
	var d=Ne()+"/u/post_iframe.html";
	Ga(W,"beforeunload",
function(){
	c.src="";
	c.parentNode&&c.parentNode.removeChild(c)});
setTimeout(b,1E3);
J.body.appendChild(c);
c.src=d;return!0};
var qf=function(){
	this.G=this.w=!1;0==Ea()%1E4&&(H(142),this.G=!0);
	this.C={};
	this.D=[];
	this.U=0;
	this.S=[["www.google-analytics.com","","/plugins/"]];
	this._gasoCPath=this._gasoDomain=this.bb=void 0;Re();Se()};
	E=qf.prototype;E.oa=function(a,b){return this.hb(a,void 0,b)};
	E.hb=function(a,b,c){b&&H(23);c&&H(67);void 0==b&&(b="~"+M.U++);
	a=new U(b,a,c);
	M.C[b]=a;
	M.D.push(a);
	return a};
	E.u=function(a){
		a=a||"";
		return M.C[a]||M.hb(void 0,a)};
	E.pa=function(){
		return M.D.slice(0)};
		E.ab=function(){
			return M.D.length};
E.aa=function(){this.w=!0};
E.la=function(){this.G=!0};
var Fe=function(a){
	if("prerender"==J.visibilityState)return!1;
	a();
	return!0};
	var M=new qf;
	var D=W._gat;
	D&&Ba(D._getTracker)?M=D:W._gat=M;
	var Z=new Y;
	(function(a){if(!Fe(a)){H(123);
		var b=!1,c=function(){if(!b&&Fe(a)){b=!0;
			var d=J,e=c;
			d.removeEventListener?d.removeEventListener("visibilitychange",e,!1):d.detachEvent&&d.detachEvent("onvisibilitychange",e)}};
			Ga(J,"visibilitychange",c)}})(function(){var a=W._gaq,b=!1;
				if(a&&Ba(a.push)&&(b="[object Array]"==Object.prototype.toString.call(Object(a)),!b)){Z=a;
					return}W._gaq=Z;b&&Z.push.apply(Z,a)});
			function Yc(a){var b=1,c;
				if(a)for(b=0,c=a.length-1;0<=c;c--){var d=a.charCodeAt(c);
					b=(b<<6&268435455)+d+(d<<14);
					d=b&266338304;b=0!=d?b^d>>21:b}return b};
				}).call(this);

ga.js line71-79

E.initData=function(){
this.a.load()};
E.Ba=function(a){
a&&””!=a&&(this.set(Tb,a),this.a.j(“var”))};
var ne=function(a){
“trans”!==a.get(sc)&&500<=a.b(cc,0)&&a.stopPropagation(); if("event"===a.get(sc)){var b=(new Date).getTime(),c=a.b(dc,0),d=a.b(Zb,0); c=Math.floor((b-(c!=d?c:1E3*c))/1E3*1); 0=a.b(R,0)&&a.stopPropagation()}},pe=function(a){“event”===a.get(sc)&&a.set(R,Math.max(0,a.b(R,10)-1))};
var qe=function(){var a=[];
this.add=function(b,c,d){d&&(c=G(“”+c));
a.push(b+”=”+c)};
this.toString=function(){
return a.join(“&”)}},re=function(a,b){(b||2!=a.get(xb))&&a.Za(cc)},se=function(a,b){b.add(“utmwv”,”5.7.1″);
b.add(“utms”,a.get(cc));
b.add(“utmn”,Ea());
var c=J.location.hostname;
F(c)||b.add(“utmhn”,c,!0);
a=a.get(vb);
100!=a&&b.add(“utmsp”,a,!0)},te=function(a,b){b.add(“utmht”,(new Date).getTime());
b.add(“utmac”,Da(a.get(Wa)));
a.get(Oc)&&b.add(“utmxkey”,a.get(Oc),!0);a.get(vc)&&b.add(“utmni”,1);
a.get(of)&&b.add(“utmgtm”,a.get(of),!0);
var c=a.get(Ic);
c&&0=a.length)gf(a,b,c);
else if(8192>=a.length){if(0<=W.navigator.userAgent.indexOf("Firefox")&&![].reduce)throw new De(a.length); df(a,b)||ef(a,b)||Ee(a,b)||b()}else throw new Ce(a.length); },gf=function(a,b,c){c=c||Ne()+"/__utm.gif?"; [/code]

gs.js line63-70

E.Fa=function(a){a&&Ca(a)?(H(13),this.set(Hb,a,!0)):"object"===typeof a&&null!==a&&this.La(a);
this.H=a=this.get(Hb);
this.a.j("page");
this.K(a)};
E.F=function(a,b,c,d,e){if(""==a||!wd(a)||""==b||!wd(b)||void 0!=c&&!wd(c)||void 0!=d&&!xd(d))return!1;
this.set(wc,a,!0);
this.set(xc,b,!0);
this.set(yc,c,!0);
this.set(zc,d,!0);
this.set(vc,!!e,!0);
this.a.j("event");
return!0};
E.Ha=function(a,b,c,d,e){
	var f=this.a.b(Dc,0);
	1*e===e&&(f=e);
	if(this.a.b(Q,0)%100>=f)
		return!1;
	c=1*(""+c);if(""==a||!wd(a)||""==b||!wd(b)||!xd(c)||isNaN(c)||0>c||0>f||100<f||void 0!=d&&(""==d||!wd(d)))return!1;
	this.ib(me(a,b,c,d));return!0};
	E.Ga=function(a,b,c,d){if(!a||!b)return!1;
		this.set(Ac,a,!0);
		this.set(Bc,b,!0);
		this.set(Cc,c||J.location.href,!0);
		d&&this.set(Hb,d,!0);
		this.a.j("social");
		return!0};
		E.Ea=function(){this.set(Dc,10);
			this.K(this.H)};
			E.Ia=function(){this.a.j("trans")};
E.ib=function(a){this.set(Eb,a,!0);
	this.a.j("event")};
	E.ia=function(a){this.initData();
		var b=this;
		return{_trackEvent:function(c,d,e){H(91);b.F(a,c,d,e)}}};
		E.ma=function(a){return this.get(a)};
		E.xa=function(a,b){if(a)if(Ca(a))this.set(a,b);
			else if("object"==typeof a)for(var c in a)a.hasOwnProperty(c)&&this.set(c,a&#91;c&#93;)};
			E.addEventListener=function(a,b){(a=this.get(Nc)&#91;a&#93;)&&a.push(b)};
			E.removeEventListener=function(a,b){a=this.get(Nc)&#91;a&#93;;
				for(var c=0;a&&c<a.length;c++)if(a&#91;c&#93;==b){a.splice(c,1);break}};
E.qa=function(){return"5.7.1"};
E.B=function(a){this.get(hb);
	a="auto"==a?Ka(J.domain):a&&"-"!=a&&"none"!=a?a.toLowerCase():"";
	this.set(bb,a)};
	E.va=function(a){this.set(hb,!!a)};
	E.na=function(a,b){return ce(this.a,a,b)};
	E.link=function(a,b){this.a.get(fb)&&a&&(J.location.href=ce(this.a,a,b))};
	E.ua=function(a,b){this.a.get(fb)&&a&&a.action&&(a.action=ce(this.a,a.action,b))};
E.za=function(){this.initData();
	var a=this.a,b=J.getElementById?J.getElementById("utmtrans"):J.utmform&&J.utmform.utmtrans?J.utmform.utmtrans:null;
	if(b&&b.value){a.set(Cb,&#91;&#93;);
		b=b.value.split("UTM:");
		for(var c=0;c<b.length;c++){b&#91;c&#93;=Da(b&#91;c&#93;);
			for(var d=b&#91;c&#93;.split(de),e=0;e<d.length;e++)d&#91;e&#93;=Da(d&#91;e&#93;);
				"T"==d&#91;0&#93;?fe(a,d&#91;1&#93;,d&#91;2&#93;,d&#91;3&#93;,d&#91;4&#93;,d&#91;5&#93;,d&#91;6&#93;,d&#91;7&#93;,d&#91;8&#93;):"I"==d&#91;0&#93;&&ge(a,d&#91;1&#93;,d&#91;2&#93;,d&#91;3&#93;,d&#91;4&#93;,d&#91;5&#93;,d&#91;6&#93;)}}};
			E.$=function(a,b,c,d,e,f,Be,k){return fe(this.a,a,b,c,d,e,f,Be,k)};
E.Y=function(a,b,c,d,e,f){
	return ge(this.a,a,b,c,d,e,f)};
	E.Aa=function(a){de=a||"|"};
	E.ea=function(){this.set(Cb,&#91;&#93;)};
	E.wa=function(a,b,c,d){var e=this.a;if(0>=a||a>e.get(yb))a=!1;
		else if(!b||!c||128<b.length+c.length)a=!1;
		else{1!=d&&2!=d&&(d=3);
			var f={};
			f.name=b;f.value=c;f.scope=d;e.get(Fb)&#91;a&#93;=f;a=!0}a&&this.a.store();
			return a};
			E.ka=function(a){this.a.get(Fb)&#91;a&#93;=void 0;this.a.store()};E.ra=function(a){
				return(a=this.a.get(Fb)&#91;a&#93;)&&1==a.scope?a.value:void 0};
E.Ca=function(a,b,c){12==a&&1==b?this.set(pf,c):this.m().f(a,b,c)};
E.Da=function(a,b,c){this.m().o(a,b,c)};
E.sa=function(a,b){return this.m().getKey(a,b)};
E.ta=function(a,b){return this.m().N(a,b)};
E.fa=function(a){this.m().L(a)};
E.ga=function(a){this.m().M(a)};
E.ja=function(){return new yd};
E.W=function(a){a&&this.get(Ab).push(a.toLowerCase())};
E.ba=function(){this.set(Ab,&#91;&#93;)};
E.X=function(a){a&&this.get(Bb).push(a.toLowerCase())};
E.ca=function(){this.set(Bb,&#91;&#93;)};
E.Z=function(a,b,c,d,e){if(a&&b){a=&#91;a,b.toLowerCase()&#93;.join(":");
if(d||e)a=&#91;a,d,e&#93;.join(":");
d=this.get(zb);
d.splice(c?0:d.length,0,a)}};
E.da=function(){this.set(zb,&#91;&#93;)};
E.ha=function(a){this.a.load();
	var b=this.get(P),c=be(this.a);
	this.set(P,a);
	this.a.store();
	ae(this.a,c);
	this.set(P,b)};
E.ya=function(a,b){
	if(0<a&&5>=a&&Ca(b)&&""!=b){
		var c=this.get(Fc)||[];
		c[a]=b;
		this.set(Fc,c)}};
E.V=function(a){
	a=""+a;if(a.match(/^[A-Za-z0-9]{1,5}$/)){
		var b=this.get(Ic)||[];
		b.push(a);this.set(Ic,b)}};