アクセスユーザーの情報取得について

2015年8月29日

Tips サービス テクノロジー

ブログを公開したり、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化するという手もあるので、その辺は、ご自由にコピペしてください。 <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を基本的に受け付けない仕様になっているので、各社が色々なやり方でトラッキングを行なっているようです。 次回はトラッキングを研究してみたいと思います。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。