アクセスユーザーの情報取得について
ブログを公開したり、WEBサービスを立ち上げたり、サーバー処理を使ってデータ処理をする場合に、
アクセスユーザーに対して、情報管理をする事は重要です。
サービスであれば、アクセス解析を行なって、
「どういったユーザーが来訪している。」とか「特定の属性のユーザーにのみ広告を出したい」などの
アクションに繋げることも必要になります。
そうした時に、ユーザーのアクセス情報ってどのレベル取得できるのか?
という事をツールにしてみました。
http://ideacompo.com/tools/getinfo/
解説
サーバーサイドでの取得情報とjavascriptにおける取得情報を切り分けてみました。
サーバーサイドで取れるユーザー情報は、IPアドレスとUAぐらいなので、本領発揮はjavascriptでしょうね。
サーバー情報
IPアドレス:javascriptで取得できないのでサーバーの重要なユーザー情報になります。
日付:javascriptはブラウザを実行しているPCやスマホなどの端末でセットされている時刻になるので、固定的に取得するにはサーバーが確実でうす。
URL:サーバー情報でURIを取得するのが難しいので、URLを無理やり作り出しています。これはJSの方が得意ですね。
UserAgent:JSでと同じ情報が取得できます。
Cookie:JSと同じ情報が取得できますが、サーバーで書き込むCookieはサードパーティcookieです。
Port:情報としては、あまり意味はないですが、サーバーログとの付け合せを行うような場合には有効です。
Http-Accept:この情報もあまり意味がないものですが、取れるものは取るスタンスです。
Http-Accept-Encoding:表示状態のheada情報
GATEWAY_INTERFACE:CGIプロトコル
SERVER_PROTOCOL:HTTPプロトコル
JavaScript
Browser:ブラウザ情報
OS:OS情報
Network:ネットワーク情報
URL:URLアドレス情報
GEO:位置情報※ユーザーダイアログにより取得を許可したユーザーの情報のみ取得できます。
Cookie:ファーストパーティcookieの取得ができます。
Storage:ローカルstorage情報の取得
ソースコード
今回はPHPファイル1つでオールインワンにしてみました。
各情報毎にAPI化するという手もあるので、その辺は、ご自由にコピペしてください。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
<html> <head> <title>getInfomation</title> <style> h2{ color:red; } h3{ color:blue; } </style> </head> <body> <h1>getInfomation</h1> <hr /> <h2>PHP-Info ver2</h2> <blockquote> <h3>IP-Address</h3> < ?php echo $_SERVER['SERVER_ADDR']; ?> <h3>Date</h3> < ?php echo date("Y")."/".date("m")."/".date("d")." ".date("H").":".date("i").":".date("s") ?> <h3>URL</h3> < ?php //通常のhttp処理 if($_SERVER['SERVER_PORT']==80){ $site = 'http://'.$_SERVER['HTTP_HOST']; } //httpsページ処理 else if($_SERVER['SERVER_PORT']==443){ $site = 'https://'.$_SERVER['HTTP_HOST']; } //その他ペート処理 else{ $site = 'http://'.$_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT']; } $site.= $_SERVER['SCRIPT_NAME'].(($_SERVER['QUERY_STRING'])?"?".$_SERVER['QUERY_STRING']:""); //表示 echo $site; ?> <h3>User-Agent</h3> < ?php echo $_SERVER['HTTP_USER_AGENT'] ;?> <h3>Cookie</h3> < ?php $data=""; foreach($COOKIE as $key=>$val){ $data .= $key."=".$val."<br />"."¥n"; } echo $data; ?> <h3>Port</h3> < ?php echo $_SERVER['REMOTE_PORT'] ?> <h3>Http-Accept</h3> < ?php echo $_SERVER['HTTP_ACCEPT_ENCODING'] ?> <h3>Http-Accept-Encoding</h3> < ?php echo $_SERVER['HTTP_ACCEPT'] ?> <h3>GATEWAY_INTERFACE</h3> < ?php echo $_SERVER['GATEWAY_INTERFACE'] ?> <h3>SERVER_PROTOCOL</h3> < ?php echo $_SERVER['SERVER_PROTOCOL'] ?> <!-- <h3>HOST-Name < ?php echo $_SERVER['SERVER_PROTOCOL'] ?> --> </blockquote> <hr /> <h2>JavaScript-Info</h2> <blockquote> <h3>Browser</h3> <script> var d = new Date(); document.write("<div><b>Date:</b> "+d+"</div>"); document.write("<div><b>Code:</b> "+navigator.appCodeName+"</div>"); document.write("<div><b>Name:</b> "+navigator.appName+"</div>"); document.write("<div><b>Ver.:</b> "+navigator.appVersion+"</div>"); document.write("<div><b>Cookie-ON:</b> "+navigator.cookieEnabled+"</div>"); document.write("<div><b>Java-ON:</b> "+navigator.javaEnabled()+"</div>"); document.write("<div><b>UserAgent:</b> "+navigator.userAgent+"</div>"); document.write("<div><b>Plugins:</b> "+navigator.plugins+"</div>"); document.write("<div><b>Display:</b> "+screen.width+" x "+screen.height+"</div>"); document.write("<div><b>Display2:</b> "+screen.availWidth+" x "+screen.availHeight+"</div>"); document.write("<div><b>Browser:</b> "+document.documentElement.clientWidth+" x "+document.documentElement.clientHeight+"</div>"); </script> <h3>OS</h3> <script> document.write("<div><b>Platform:</b> "+navigator.platform+"</div>"); document.write("<div><b>Language:</b> "+((typeof navigator.language)?navigator.language:navigator.browserLanguage)+"</div>"); </script> <h3>Network</h3> <script> document.write("<div><b>Enabled:</b> "+navigator.taintEnabled()+"</div>"); document.write("<div><b>Online:</b> "+navigator.onLine+"</div>"); </script> <h3>URL</h3> <script> document.write("<div><b>Enabled:</b> "+location.href+"</div>"); </script> <h3>Geo</h3> <script> document.write("<div><b>Enabled:</b> "+((typeof navigator.geolocation)?"true":"false")+"</div>"); if(typeof navigator.geolocation){ navigator.geolocation.getCurrentPosition(function(position){ var html=""; html+="<div><b>TimeStamp:</b> "+position.timestamp+"</div>"; html+="<div><b>緯度 Latitude:</b> "+position.coords.latitude+"</div>"; html+="<div><b>経度 Longitude:</b> "+position.coords.longitude+"</div>"; html+="<div><b>座標誤差:</b> "+position.coords.accuracy+"</div>"; html+="<div><b>高度:</b> "+position.coords.altitudeAccuracy+"</div>"; html+="<div><b>方角:</b> "+position.coords.heading+"</div>"; html+="<div><b>速度:</b> "+position.coords.speed+"</div>"; document.getElementById("geo").innerHTML = html; }); } </script> <div id="geo">...取得中...</div> <h3>Cookie</h3> <script>document.write(document.cookie);</script> <h3>Storage</h3> <script> var ls = ""; for(var i in localStorage){ ls += i+"="+localStorage[i]+"<br />"; } document.write(ls); </script> </blockquote> </body> </html> |
その他
かつて楽天が特許を取った、Aタグでリンク設定された文字の色を判別して、「青色」なら、未アクセス「紫色」ならアクセス済み
という判定をJSで行なうという手法があったんですが、アクセス情報の取得をする目的だったため、大量のURLを登録するような
事が行われ、ブラウザ側で、その手法を塞がれてしまうという悲しい結果になってしまいました。
また、ユーザー情報はトラッキング情報とも言って、iOSのメインであるsafariブラウザはサードパーティcookieを基本的に受け付けない仕様になっているので、各社が色々なやり方でトラッキングを行なっているようです。
次回はトラッキングを研究してみたいと思います。
