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での私のメールアドレスなのでここにメールしてもらえれば相談に乗りますね。
No.4
- 回答日時:
一番簡簡単なのは、Cookieを利用することでしょうか。
if($ENV{'HTTP_COOKIE'}){
exit;
}
else{
print "Set-Cookie:~
}
Cookieをチェックして、なければREMOTE_ADDRのチェックをするのがいいでしょう。
No.3
- 回答日時:
それからもう1つ。
環境変数HTTP_REFERERの内容を見て、自分のサイト内から飛んできたユーザーである場合にはカウントしない、という方法もあります。
ただしこの変数は、プロバイダの方針などによって変なアドレスを指していることもあるので、あらかじめ正しく動作するかテストする必要があります。
No.2
- 回答日時:
単純なのは、アクセスカウンタの記録ファイルにカウント数だけでなくREMOTE_ADDRのデータも一緒に記録してしまい、次回アクセス時にそれを照合する方法ですね。
ソースはその辺に転がっているフリーのアクセスカウンタを見れば簡単だと思いますが。
私も自作のアクセスカウンタ公開してますんで、参考にされるならどうぞ。(URLは下記)
ただlockファイルを作らない場合、OS側のlock機構がしっかりしていないとカウントデータが飛ぶ場合がよくあります。
OSにflockが付いていても飛ぶときは飛びますから(笑)、私の場合はflockとrenameロックの二重ロックにしてます。
参考URL:http://www.cocky.to/MNGcount/
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;
}
この回答への補足
専門家の方が答えてくださって、大変心強く思っています。
私は、CGIは他作のものをダウンロードして、手を加えたりして使う派なのです。
で、今回は、ネットサーフレスキューのWebアナライザーというスクリプトを使っているのです。相手のOSとか様々なことを調べられて便利なのですが、唯一、更新ボタンを連続して押して、多重カウントを取り、キリ番(キリのいい番号を踏んだ人の名前をのせる)と名乗る人が現れ始めたのです。
大変申し訳ないのですが、このスクリプトの場合、どのような感じでどこら辺に書けばいいのか教えてください。よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) Excelでの複数条件のカウントについて 1 2022/09/25 07:40
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) Countifよりも早く重複数をカウントする方法ありますか? 18 2022/07/04 13:39
- Visual Basic(VBA) VBAのことで質問があります 2 2022/10/12 14:39
- Visual Basic(VBA) Excel VBA 大量のレコードからある列の重複数をカウントする方法?拡張編 7 2022/08/22 13:43
- Excel(エクセル) 【Excel質問】 「本日の日付」から指定条件を満たす営業日経過後の日数を表示させる関数式 3 2022/06/06 23:28
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HPで「あなたは何人目です」...
-
HPのカウンターのことで
-
アクセスカウンターが動かなく...
-
非同期カウンタの設計
-
カウンターで現在の訪問者数な...
-
Googleアナリティクスとは 調べ...
-
三菱GXDeveloper 条件分岐
-
アクセスカウンターが、「0」...
-
杜甫々さんのgifcat.plをカンマ...
-
Lineのaccessが32回というのは...
-
jQueryを使ってドラムロールを...
-
PowerShellでのエラー出力の読...
-
cgiゲーム設置可能なサーバー
-
自火報について
-
風俗嬢の心のセンサーは壊れて...
-
dewplayerの日本語表示
-
ダイアログをJavascriptで操作...
-
太陽光(ソーラーパネル)設置の...
-
ログイン画面
-
自分でチャットのサイトを作り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
自動人数カウンターってありま...
-
HPで「あなたは何人目です」...
-
シェルのSTEP数について教えて...
-
分周回路について
-
ホームページのカウントについて
-
アクセスカウンターの作り方
-
クリック数を1日ごとにカウン...
-
バーコードのカウンター探して...
-
アクセスカウンターとキリ番
-
アクセスカウンタの2重カウン...
-
非同期カウンタの設計
-
PHPで高機能アクセスカウンタを...
-
シーケンス制御のラダープログ...
-
HPのアクセス数のカウント回数...
-
三菱GXDeveloper 条件分岐
-
カウンターは…
-
アクセスカウンタ、途中からカ...
-
カウンターが回らない
-
カウンターが重い
-
HP作成におき、カウンターを置...
おすすめ情報