カウンターで同ナンバーを複数人が取るのを防ぐには

[上に] [前に] [次に]
たんぽぽ [E-Mail] [HomePage] 2000/01/22(土) 02:56:00
同一アドレスチェック機能をONにしてあるのですが、自分がアクセスして、数分後に再表示を行うとその時点での最終アクセス者のカウントが表示されてしまいます。つまり同一カウントを複数の人がゲットする可能性があることになります。これを防ぐ方法はないでしょうか。

EMI 2000/01/22(土) 07:13:18
アドレスと同時にそのときのカウンターも記録しておけばいいのでは。

andi 2000/01/22(土) 12:42:46
ワンタイムクッキーに保存するのはどうでしょう?

ラウォッチ 2000/01/22(土) 14:36:56
よくわかりませんが...。
カウントする時に排他制御していない、ってことですか?
排他制御をしていれば、「同ナンバーを複数人が取る」はないはずです。

andi 2000/01/22(土) 14:44:18
つまりはAさんが999ヒットを取って
Bさんが1000ヒットを取りました。
んでAさんが再びカウンタを見るとアドレスチェックによって
カウントアップされないので1000ヒットが表示される
ということでしょう。

んで僕が言っているのは
Aさんが最初に来たときのカウント情報(999)をクッキーに
保存し、カウンタを表示する際にクッキーにカウント情報があれば
それを表示しては?ってことです。

まぁクッキーOFFだと効果ありませんが。

ちゃちゃ 2000/01/22(土) 23:20:21
>つまりはAさんが999ヒットを取って
>Bさんが1000ヒットを取りました。
>んでAさんが再びカウンタを見るとアドレスチェックによって
>カウントアップされないので1000ヒットが表示される
Aさんの2度目のカウント値が1000を表示する事はありえないのでは?
キャッシュを表示していれば999だし、正常にカウントUPすれば1001だと・・・

質問者の方、本当に最終値が表示されますか?キャッシュを表示しているのでは?
同じマシンからの場合最後のキャッシュが表示される場合はありますよ。

カウンタの再表示毎にキャッシュをクリアするか、CGIでヘッダーに
Content-type: image/gif の前に Pragma: no-cache を入れてみるとか?

茶しぶ男 2000/01/22(土) 23:52:58
同一アドレスチェックonの場合、
同じ値を複数の人が「見る」ことは十分有り得ます。

1.Aさんがカウンターを1000に「更新」
2.Aさん、他のページに移動
3.Bさん、カウンターを1001に「更新」
4.Aさん、カウンターのページに戻る
5.Aさんは、1001と表示されたカウンターを「見る」

つまり、同一チェックがONになっているので、4.の時にカウンターを更新しないのです。

もし、テキスト表示(SSI)ができるのなら、
更新しない(同一アドレスチェックがON)時に
何らかのメッセージを出すとか改造すれば、
更新したのか、ただ他の人が更新した値を「見ているだけ」か、
区別はつくようになりますね。

CGIしか使えないときは、画像だけだからちょっとムリ?かも。


まぁ、同一アドレスチェックをOFFにするという手もありますが、
それはやりたくないんでしょ?

とほほ 2000/01/22(土) 23:56:11
話題のカウンター作者のとほほです。(^^;)
> 正常にカウントUPすれば1001だと・・・
同一アドレスチェック機能をオンにしている時はカウントUPしないので、
その時点での最新値1000を表示します。

で、上記のクッキー方式とは別の方法ですが、
アドレスチェックの際に、その日に初めてそのアドレスでアクセスが
あった時のカウンター値をログから読み出して、そのカウンター値を
表示させるように wwwcount.cgi を改造する・・・という手も。

ちゃちゃ 2000/01/23(日) 00:26:15
なるほど、「同一アドレスチェック機能」とは、とほほさん作のものを指してい
たのですか。失礼いたしました(^^;
#って事は、この場合同じプロクシ経由の場合(複数の人)って事なのですね。

2000/01/23(日) 00:54:33
>#って事は、この場合同じプロクシ経由の場合(複数の人)って事なのですね。
違います.もちろん,その場合も含みますが,プロキシを通していなくても同じ事です.
詳しくはソースを見ればわかると思いますが,一度訪問した人が次に見る番号は最新の番号です.
ただ,カウントアップはされないので複数の人が見てしまうという事.

根本的な解決ではありませんが,簡単な方法としてアクセスログをとっているならそれを公表してはいかがでしょう.
hostやusreagentで自分かどうかの区別はつくと思います.

たんぽぽ 2000/01/24(月) 00:06:34
みなさんいろいろとありがとうございます。
で、うちはSSIはつかえません。あとアクセスログは取っています。
んと、よくわからないのですが、とほほさんのおっしゃている
>で、上記のクッキー方式とは別の方法ですが、
>アドレスチェックの際に、その日に初めてそのアドレスでアクセスが
>あった時のカウンター値をログから読み出して、そのカウンター値を
>表示させるように wwwcount.cgi を改造する・・・という手も。
というのは具体的にどのようにすれば良いのでしょう?宜しくお願いします。

とほほ 2000/01/24(月) 23:41:42
wwwcount.cgi の、
「すでに同アドレスからのアクセスがあればカウントアップしない」
の個所に、以下の4行追加すると、できるかも。

if ($do_address_check) {
  open(IN, "$file_access");
  while (<IN>) {
    # 以下の3行を追加
    if ($_ =~ /^COUNT = \[ (.*) \]/) {
      $tmpcount = $1;
    }
    if ($_ eq "ADDR  = [ $ENV{'REMOTE_ADDR'} ]\n") {
      $count_up = 0;
      # 以下の1行を追加
      $count = $tmpcount;
      last;
    }
  }
  close(IN);
}

たんぽぽ 2000/01/25(火) 00:43:01
[[解決]]
とほほさん、お手数をお掛けしました。
うまくいきました。本当にありがとうございました。

[上に] [前に] [次に]