REFERER: 参照元。

自分のページがどこからリンクされているのか、というのは案外気になるもの。
検索エンジンにどれだけ収集されているのか、と言うことも、
ばかばかしい見栄だな、だなとは思うけど、やっぱり気になってしまう。
で、自分用のアクセス解析プログラムを作ったときに、
HTTP_REFERER(参照元/リンク元)も取得しファイリングするように設計したのだけど、
精度が今ひとつ。
それも当然のことで、PHPやPerlを通して『環境変数』という形でサーバに渡されるHTTP_REFERERは、
Norton Internet Security などのセキュリティ対策ソフトウェアが起動している環境では、
『プライバシーの保護』という意味で送信が制限される。
おおさっぱに言ってしまえば、そういう環境では、HTTP_REFERERを取得できない。
それはほとんど正解なのだけど…

今日、巡回ソフトウェア対策でとあるサイト(☆☆白いはインターネット☆☆)を読んでいたところ、
HTTP_REFERはサーバに送られていないだけで、ブラウザには情報として存在してる、
だから、JavaScriptを使えば取得できる…という記事を発見。
(→ セキュリティーソフトと参照元(リファラ)隠し

ガーン!HTTP_REFERERは保護されてると思いこんでいた、というのと、
多くの解析プログラムはコレを利用してる、という2つの点でショックを受けた。
早速、プログラムの設計し直し。
ヒントになったのは、このページ。
PHP+JavaScriptを利用したアクセスログ取得方法 – Memo & Nucleus

このページによると、JavaScriptで取得した後、
<script>タグや、<img>タグなどを使ってphpを呼び出してやれば、
値をプログラムに渡せるらしい。
実際の記述に関しては、PHPでのアクセス解析プログラムをリリースされている
こちらを参考にさせていただいた。
LovPop.net – Apricot アクセス解析プログラム

そうしてできた最低限の解析タグがこちら。
<script language=”JavaScript”>
ref = document.referrer;
document.write(‘<img src=”<?=$URL?>’ + ‘?mode=log&P=<?=$P?>&ref=’ + escape(document.referrer) + ‘”>’);
</script>
<noscript><img src=”<?=$URL?>?mode=log”></noscript>
phpファイル内に記述してるので、そのような解析タグになってます。
これで、環境変数をGETで取得してやれば、問題ないというわけ…

正当な手法といえるのか、それとも小技と言うべきか…
『アクセス解析界』では常識っぽい匂いもするけど。
JavaScriptみたいなクライアント系スクリプトは、動作がブラウザ任せなんで
好きじゃないし、極力避けてるんだけど、コレばっかりは仕方ないかもな。