• ベストアンサー

アクセスカウンタの複数カウント防止策

アクセスカウンタの複数カウント防止策となるようなCGIのソースを教えていただけますか。 lockファイルを作るのではなく、CGI本体にいれたいのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • k-ji
  • ベストアンサー率57% (11/19)
回答No.5

>ネットサーフレスキューのWebアナライザーというスクリプトを使っているのです。 >相手のOSとか様々なことを調べられて便利なのですが、唯一、更新ボタンを連続し >て押して、多重カウントを取り、キリ番(キリのいい番号を踏んだ人の名前をのせる) >と名乗る人が現れ始めたのです。 とのことなので、Web アナライザを見てみました。 で、このスクリプトでは、REMOTE_HOST とアクセス時間を1時間単位で取得記録し 1日毎にログファイルを作っています。 そこで、今のアクセスが1時間以内の時はログ記録をしないようにしてやれば良い訳です。 ただし、この方法は違うユーザーでも、同じサーバを使って1時間以内にアクセスしてきた 場合もはじいてしまうという欠点があります。 (HTTP_REFERER だとリロードされた時(更新ボタンを押したとき)には、リファーが消えて しまいどこから来たのか判別できなくなります。また Cookie はブラウザが受け付けない 設定になっている場合や、一部のブラウザでは、使えないのです。) で、log.cgi の 77~90行目でログ記録をしているので、その前にログチェックいれて やります。実際のスクリプトは以下のようになります。 #-----------------------------------ここから------------------------------------ # ログの読み込み open(LOG,$log) @lines = <LOG>; close(LOG); #スキップフラグをまずoffにする $log_skip = 0; # ログチェック foreach $data (@lines) { chop($data); ($LOG_HOUR,$LOG_HTTP_REFERER,$LOG_REMOTE_HOST,$LOG_HTTP_USER_AGENT,$LOG_OS) = split(/\t/,$data); if(($LOG_REMOTE_HOST eq $REMOTE_HOST) && ($HOUR eq $LOG_HOUR)) { # もし、そのユーザのアクセスしてきたサーバと時間が一致したら、 # スキップフラグをonにしてループを抜ける。 $log_skip = 1; last; } } #スキップフラグがonでなければログ記録 if($log_skip != 1) { #ここからが、77行目~90行目 if (open(LOG,">> $log")) { print LOG "$HOUR\t$HTTP_REFERER\t$REMOTE_HOST\t$HTTP_USER_AGENT\t$OS\n"; close(LOG); chmod 0666,$log; } if (open(LOG,">> $log_file")) { print LOG "\n"; close(LOG); } #ここまでが、77行目~90行目 } #-----------------------------------ここまで------------------------------------ となります。 たぶんこれで大丈夫だと思いますが、もし何かあったら k-ji@mail.goo.ne.jp がgooでの私のメールアドレスなのでここにメールしてもらえれば相談に乗りますね。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • ykc
  • ベストアンサー率29% (28/95)
回答No.4

一番簡簡単なのは、Cookieを利用することでしょうか。 if($ENV{'HTTP_COOKIE'}){ exit; } else{ print "Set-Cookie:~ } Cookieをチェックして、なければREMOTE_ADDRのチェックをするのがいいでしょう。

すると、全ての回答が全文表示されます。
noname#25358
noname#25358
回答No.3

 それからもう1つ。  環境変数HTTP_REFERERの内容を見て、自分のサイト内から飛んできたユーザーである場合にはカウントしない、という方法もあります。  ただしこの変数は、プロバイダの方針などによって変なアドレスを指していることもあるので、あらかじめ正しく動作するかテストする必要があります。

すると、全ての回答が全文表示されます。
  • cocky
  • ベストアンサー率57% (232/402)
回答No.2

単純なのは、アクセスカウンタの記録ファイルにカウント数だけでなくREMOTE_ADDRのデータも一緒に記録してしまい、次回アクセス時にそれを照合する方法ですね。 ソースはその辺に転がっているフリーのアクセスカウンタを見れば簡単だと思いますが。 私も自作のアクセスカウンタ公開してますんで、参考にされるならどうぞ。(URLは下記) ただlockファイルを作らない場合、OS側のlock機構がしっかりしていないとカウントデータが飛ぶ場合がよくあります。 OSにflockが付いていても飛ぶときは飛びますから(笑)、私の場合はflockとrenameロックの二重ロックにしてます。

参考URL:
http://www.cocky.to/MNGcount/
すると、全ての回答が全文表示されます。
  • k-ji
  • ベストアンサー率57% (11/19)
回答No.1

元の、カウンタがどのようなことを記録して、どのような処理をしているか 分からないと組み込むことが出来るようなスクリプトは提示できません、 すみません。 で、通常ロックを使わずに複数カウントをしないようにするには、 アクセスしてきた人のアドレスとアクセス時刻をログに記録し、その記録から 1~5分以内に(時間はカウンタを使う人の考えによります)同じアドレスからの カウントはしない。という事をします。 アクセスしてきた人のアドレスの取得するサブルーチンは以下の通りですので、 参考にしてください。 このルーチンはサーバがドメイン名の逆引きをサポートしていれば生IPでなく ドメイン名を取得できますのでログ記録すればどこから来た人が多いのかなどの 統計処理にも使えます。 sub domain_name { my($addr) = $ENV{'REMOTE_ADDR'}; my($h_adr) = gethostbyaddr(pack("C4",split(/\./,$addr)),2); if ($h_adr ne '') { } else { if (/.+\.(.+)\.(.+)\.(.+)$/) { $h_adr = "\*\.$1\.$2\.$3"; } elsif (/.+\.(.+)\.(.+)$/) { $h_adr = "\*\.$1\.$2"; } elsif (/.+\.(.+)$/) { $h_adr = "\*\.$1"; } else { $h_adr = "on the internet"; } } $h_adr; }

mri
質問者

補足

専門家の方が答えてくださって、大変心強く思っています。 私は、CGIは他作のものをダウンロードして、手を加えたりして使う派なのです。 で、今回は、ネットサーフレスキューのWebアナライザーというスクリプトを使っているのです。相手のOSとか様々なことを調べられて便利なのですが、唯一、更新ボタンを連続して押して、多重カウントを取り、キリ番(キリのいい番号を踏んだ人の名前をのせる)と名乗る人が現れ始めたのです。 大変申し訳ないのですが、このスクリプトの場合、どのような感じでどこら辺に書けばいいのか教えてください。よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A

  • アクセスカウンターの二重カウント防止とは

    忍者カウンターを利用しています。設定で、二重カウント防止とした場合、ひとたびそのページにアクセスするとその端末からのアクセスは二度とカウントされないということですか。それとも、数日置いたらまたカウントになるのでしょうか。二度としないのなら、カウンターが50000ということは、過去に純粋に50000台の端末からアクセスされたと思っていいのですか?

  • 重複カウント防止のカウンタを回す方法

     こんにちは。重複カウント防止のカウンタを回すにはどうしたらいいのでしょうか?プロキシサーバを利用して別のIPでアクセスしても重複カウント防止のカウンタの数が増えません。どなたか重複カウント防止のカウンタを回す方法、知っていたら教えてください。

  • アクセスカウンタにカウントされない

    最近、ブラウザIE5をIE6にバージョンアップしました。しかし、いろんなウェブサイトにアクセスしてみると アクセスカウンタが全て888888・・・となっていることに気づきました。たぶん、私がサイトに行ってもカウントされていないのだと思います。まるで幽霊みたいなので、できればカウントされるようになりたいと思います。 どうしたら良いでしょうか? ちなみに、見ることができないサイトがあるとか、CGIフォームが使えないといった不都合が全くありません。

  • 複数ページをカウントするアクセスカウンタ

    トップページに設置したアクセスカウンタで同じHP内のa.htmlやb.htmlなどのに直接アクセスした数もカウントしたいのですが、そういうCGIはありませんでしょうか。 理由としてはHP内の特定ページに直接リンクを張られていることが多く、トップページのカウンタにその数が反映されないので困っているためです。 以上よろしくお願いします。

    • ベストアンサー
    • CGI
  • アクセスカウンタの2重カウント防止機能について

    キリ番ゲットカウンタをつけようかと考えています。 素朴な疑問なのですが、アクセスカウンタに2重カウント防止機能のあるカウンタで、このような場合はどのように機能し表示されるのでしょうか? 例えば、同一訪問者のアクセスをカウントしない時間を6時間にした場合、6時間以内に何度きてもカウントされないわけですよね。 しかし、別の人がくればカウンタは動くはず。(動かなければおかしい) この場合、どのような動き、表示になるのでしょうか? Aさんが1回目9:00にアクセスし、アクセス者が1人目立った場合、当然カウンタは『1』。 Aさんが再び11:00にアクセスしました。 このとき、1回目にアクセスしてから、他のアクセス者がいなかった場合は、カウンタは『1』と表示されますよね。 その後、12:00のBさんがアクセスしました。 すると、カウンタが『2』になりますよね。 ここまではいいのですが、またまたAさんがアクセスした場合はどうなるのでしょうか? Aさんが、13:00にアクセスした場合(Bさんがアクセスしてから、誰もアクセスしていないとすると)、本来カウンタ数は『2』ですよね。6時間以内ですから。 でも、Aさんにも『2』と表示されるのでしょうか? もしこの数字が、キリ番だったらどうなるのでしょうか? どなたか詳しく教えて下さい。よろしくお願いします。

    • ベストアンサー
    • CGI
  • モバイルアクセスカウンタ

    初心者。 モバイル用のアクセスカウンタ設置中です。 CGIROOMさんのモバイルカウンターをダウンロードしました。 http://cgiroom.nu/list/count/mcount/ そこで、質問があるのですが、 モバイルカウンタは、count.cgi?にアクセスしてカウントされますよね?? トップページなどに設置してカウントされるようにしたいのですが、 そのようなことは可能なのでしょうか?? HTMLのソースに 今日のアクセス<img src="CGIまでのパス/count.cgi?mode=t"> と記入しても、 数字は表示はされるのですが、カウントはしないのです。 宜しくお願いします。

    • 締切済み
    • CGI
  • アクセスカウンタ、途中からカウントしたい

    既出の質問があったらすみません。ぱっと見たのですが、なかったようなので・・・。 アクセスカウンタを自分のHPにつけているのですが、ISPの変更に伴い、HPも引越しを予定しています。それで、新しいHPではこれまでの人数+何人、というカウントをしたいのです。 新しいところはCGIにも対応していて、自作も使えるようなのですが、面倒なのでとりあえずプロバイダの用意しているカウンタをつけたいと思います。 それで一つ質問なのですが、前のページでは、プロバイダの用意するCGIを使うときにはリンクのような形で <img SRC="/cgi-bin/count.cgi?dd=**|ft=*&frgb=******&df=***.dat|reload=F"> と書いていたのですが、ここの設定を何とか変えて300あたりからカウントを始めることはできるのでしょうか? CGIに関するホームページも見てみたのですが、なかなかこのようなケースが見つからなくて・・・T_T よろしくお願いします。

    • ベストアンサー
    • CGI
  • アクセスカウンターを探しています。

    今まで「にくきゅうねっと」というところでカウンターをレンタルしていて、安定しているしとても気に入っていたのですが、リニューアルしたHPのデザインにあう画像が無く、他でレンタルできる所を探しています。 希望は、同一IPの二重カウント防止機能はあったほうがいいのですが、例えば同じIPでも何時間か経ったらカウントするようなもので、画像のデザインが多いところです。 アクセス解析は必要ありません。 いろいろと検索して探したのですが、二重カウント防止機能が、どのくらいの時間防止するのか使ってみないとわからないので、詳しい方がおられましたら、是非教えて下さい。よろしくお願いします。 (CGIが使えるHPスペースなのですが、設置方法が難しそうなので、諦めてしまいました。)

  • アクセス解析付無料カウンター

    無料でレンタルでき、アクセス解析が付いたカウンターを探しています。 二重カウント防止でなおかつ広告がないところを知りたいのですが、 自分で調べたものでは停止中などばかりで困っています。 CGIを使わなくてもいいタイプで強度が強いところがあれば どこかおすすめを教えてください。デザインも多くあれば嬉しいです。 宜しくお願いします。

  • 2つのアクセスカウンターの数が違うのはなぜ?

    ブログのトップページに10ヶ月以上前からアクセスカウンターを設置しています 今まで、二重カウントしない「忍者」を使っていたのですが カウンターの絵柄が今ひとつで気に入っていません。 それに対し「FC2」のカウンターはお気に入りの柄がありましたが 二重カウント防止になってなかったので使っていませんでした。 ところが、最近「FC2」のカウンターも二重カウント防止機能がついたので 「忍者」から「FC2」に移行しようと思ってます しかし、いきなり移行するのも不安がのこり、ここ数日は 「忍者」と「FC2」両方のカウンタを設置してみたんです そしたら、両方とも二重カウント防止機能がついているにもかかわらず 数値が毎日20くらい違います(忍者>FC2) (1)両方とも二重カウント防止機能がついているのに数が違ってくるのは、なぜなんでしょうか (2)「忍者」と「FC2」どちらのデータが正しいのでしょうか     この場合の「正しい」というのは、私が求めている訪問者の数え方だと思いますが     ・一日に時間を変えて同じ記事を2回以上見ても、1でカウント     ・一日に時間を変えて違う記事を読んでも、1でカウント     ・ブログ内の複数の記事を読んでも、1でカウント (3)もしどちらも正確でない場合は、今まで設置していた「忍者」と    カウンター数が少なくでる「FC2」、どちらを使うとよりベターなんでしょうか 以上、長くなりましたが、よろしくお願いいたします

このQ&Aのポイント
  • 筆まめ33を使用して郵便番号や住所は印刷されるが、氏名だけが印刷されない問題が発生しています。最近入力し登録をした方に限り、氏名が印刷されない場合があります。すべての情報が印刷されるようにするにはどうすれば良いか解決策をご紹介します。
  • 筆まめ33で宛名印刷を行う際に、氏名だけが印刷されないという問題が報告されています。この問題は最近入力し登録をした方に限り発生しています。氏名が印刷されない原因と対処法について解説します。
  • 筆まめ33の宛名印刷で、氏名が印刷されずに残るという問題が報告されています。この問題は最近入力し登録をした方に限り発生しています。氏名が印刷されるようにする方法について詳しく解説します。
回答を見る

専門家に質問してみよう