• 締切
  • すぐに回答を!

ページ訪問時の個別カウントについて

  • 質問No.5613969
  • 閲覧数78
  • ありがとう数3
  • 回答数2

お礼率 42% (3/7)

こんばんは,いつもお世話になっております.
Webサイトへのアクセスカウンターを作ってみました.
人がページへ訪問→+1してcount.datに加算→同ページに数値を表示というプロセスです.

count.cgi
-----------------------------------------
#! usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);

open(FILE, "+<./count.dat") or die("ERROR");
eval{ flock(FILE, 2); };
$count = <FILE>;

#カウントファイルの書き込み
seek(FILE, 0, 0);
print FILE ++$count;
close(FILE);

#サーバー出力
print qq[Content-type: text/html\n\n];

print qq[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">];
print qq[<html>];
print qq[<head><title></title></head>];
print qq[<body>];
print qq[$count];
print qq[</body>];
print qq[</html>];

-----------------------------------------
非常に簡易的なものなのですが,この数値を個人のIPなど,無二の値を用いて識別し,count.datに保存することは可能でしょうか?

もちろん個人情報なので出力については考慮したいと思っております.
何か不明な点がございましたら随時対応しますので,よろしくお願い致します.

回答 (全2件)

  • 回答No.2

ベストアンサー率 45% (5062/11036)

>この数値を個人のIPなど,無二の値を用いて識別し,count.datに保存することは可能でしょうか?
 どうしても、個人情報を捕捉したければ、
 Cookieに、最初の訪問時刻などでユニークな値を作って、それを保存すればよい。
 でもね、サーチエンジンやら何やらで肥大化して・・、そうまでしてゴミを溜め込まなくても良いのではないかと。
  • 回答No.1

ベストアンサー率 45% (5062/11036)

普通は、cookieを使います。
有効期限は1年程度でよいかな

普通はこんな書き方しない。qを使えば
print q~Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title></title></head>
<body>
~;
print "$count\n";
print q~</body>
</html>
~;

qqを使えば
print qq~Content-type: text/html\n
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>\n<head><title></title></head>\n<body>\n$count
</body>\n</html>\n~;

cookieを使ってカウントするなら、
★下記ソースは、タブ(\t)を全角スペース2個に置換してある。
★元に戻してテスト
★reload対策はしていない

#!/usr/local/bin/perl

$DEF = 365;
if($ENV{'HTTP_COOKIE'})
  {
  $cookies = $ENV{'HTTP_COOKIE'};
  @cookie = split(/;/,$cookies);
  foreach $cook (@cookie) {
    if ($cook =~ /Visited=(\d+)/){
      $NewCount = $count = $1;
      $NewCount++;
    }
  }
}
else{ $NewCount = 1;}
&setCookie;
print qq~Content-type: text/html
$COOK
\n
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>\n<head><title></title></head>\n<body>
<p>あなたは$count回訪問されました</p>
</body>\n</html>\n~;

sub setCookie{
  my ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + $DEF*24*60*60);
  @week = (Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);
  @monthg = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);
  $expires = sprintf("%s\, %02d\-%s\-%04d %02d:%02d:%02d GMT",$week[$wdayg],$mdayg,$monthg[$mong],$yearg +1900,$hourg,$ming,$secg);
  $COOK = "Set-Cookie: Visited=$NewCount,expires=$expires";
  }
関連するQ&A

ピックアップ

ページ先頭へ