[Top]
[CGI研究室]
- カウンタCGIでの同一IPアドレスチェック
アクセスされるたびにカウンタを単純にカウントアップするだけでは、正確なカウントを把握できません。
単にカウント数アップだけに拘る場合はその方が良いのでしょうが、サイトを訪れた人を正確にカウントしたい場合には不向きです。
完全に正確なカウントを行なう事はできませんが、極力正確にカウントしたい場合には
アクセス元のIPアドレスをチェックして同一IPアドレスの場合はカウントしないという方法があります。
- 同一IPアドレスチェックの方法
同一IPアドレスをチェックする方法として以下のパターンがあります。
- 直前のIPアドレスチェック
カウンタファイルにカウント数の他にアクセス元のIPアドレスを1つだけ記録する様にし、
カウンタへアクセスされた場合に直前にアクセスされたIPアドレスと同じかどうかをチェックする。
同じIPアドレスだった場合はカウントアップしない。
この方法は、一時に一人だけがサイトにアクセスしている場合には有効ですが、
複数の人が同時アクセスした場合には対処できません。
- 同日IPアドレスチェック
カウンタファイルにカウント数の他に日付と
同日にアクセスされた全てのIPアドレスを記録する様にし、
カウンタへアクセスされた場合に日付の切り替わりチェックをしてから
既にアクセス済みのIPアドレスかどうかをチェックする。
既にアクセス済みのIPアドレスだった場合はカウントアップしない。
日付の切り替わりチェックでは、日付が切り替わった場合に前日にアクセスされた
IPアドレスの情報を全てクリアする処理を行なう。
この方法では、丁度日付が切り替わる頃にアクセスしていて、日付が切り替わる前と後に
アクセスが行われると日付が切り替わった後は新規のカウントとみなされます。
- 一定時間経過チェック
カウンタファイルにカウント数の他にアクセスされた全てのIPアドレスと
IPアドレス毎のアクセスされた時間を記録する様にし、
カウンタへアクセスされた場合に一定時間経過チェックをしてから
既にアクセス済みのIPアドレスかどうかをチェックする。
既にアクセス済みのIPアドレスだった場合はカウントアップしない。
一定時間経過チェックでは、アクセスされた時間から一定時間以上経過している
IPアドレスの情報を全てクリアする処理を行なう。
- カウントアップしない場合の対処
実は、前述の「同日IPアドレスチェック」と「一定時間経過チェック」には1つ盲点があります。
それは、以下のような場合に起こります。
・Aさんがカウンタがあるページをアクセス。
(カウントアップあり/カウント数 = 999)
・Bさんがカウンタがあるページをアクセス。
(カウントアップあり/カウント数 = 1000)
・再度Aさんがカウンタがあるページをアクセス。
(カウントアップなし/カウント数 = 1000)
つまり、再度Aさんがカウンタがあるページをアクセスした場合に、
実際はBさんがカウントアップしたにもかかわらず、
Aさんがカウントアップしたと勘違いしてしまう可能性があるということです。
記念カウンタなど記録しているサイトでは、記念カウンタをGETした人が複数現われる可能性があり
判断がつきません。
この場合の対処としては以下の方法があります。
- カウンタ表示を変える
カウントアップした場合とカウントアップしない場合で異なるカウンタ画像
(テキストカウンタの場合は色を変えるなど)を表示する。
- 最初にアクセスされた時のカウント数を表示
カウンタファイルに記録するIPアドレスの情報と一緒に最初にアクセスされた時のカウント数も
記録しておき、再度アクセスされてカウントアップしない場合は、最初にアクセスされた時のカウント数を表示する。
CGI Saloon