ブログを公開したり、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を基本的に受け付けない仕様になっているので、各社が色々なやり方でトラッキングを行なっているようです。
次回はトラッキングを研究してみたいと思います。
0 件のコメント:
コメントを投稿