初めて自分の家と他人の家が違う、と意識した時

HPで掲示板のCGIを使っているのですが、まれに掲示板のページで何回も連続アクセスする人がいるようで、たまに掲示板が重くなって困っております。(私へのいやみのF5連打?)

そこで、10秒中に5回以上連続アクセスをしたら30秒間くらい『連続アクセスはおやめ下さい』と表示する機能を掲示板のCGIに組み込みたいと思っております。

しかし、そのようなプログラムがなく、困っております。
ちなみに、ニコニコ動画でも何度もF5キーを連打するとしばらく

ニコニコ動画からのお願い
短時間での連続アクセスはご遠慮ください
混雑緩和のため、皆様のご協力をお願いします

とでますが、そんな感じをイメージしております。
どのような文を書けばよいのでしょうか?ご伝授いただけると幸いです。

A 回答 (1件)

色々な方法があると思いますが、cookieを使う方法です。


cookieが無効の場合には機能しませんが・・・

#!/usr/bin/perl
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
my $cgi = new CGI;

#cookie(access_log)の取得
my @access_log=split(/,/,$cgi->cookie(-name=>'access_log'));

#現在日時取得
#time関数は、GMT(世界標準時)の1970年1月1日0時0秒からの秒数を返します
my $now=time;

my $ret;
#5回前のアクセスと比較
if($access_log[4] eq ''){
$ret=0;#まだ5回アクセスしてない
}else{
$ret=$now-$access_log[4];
}

#cookie(access_log)の保存
splice @access_log,0,0,$now;#先頭に今回の時間を入れる
splice @access_log,5; #6番目からの要素を削除
my $cookie=$cgi->cookie(-name=>'access_log',-value=>join(',',@access_log));
print $cgi->header(-charset=>'Shift_JIS',-cookie=>$cookie);
#headerは1回しかできないので、文字出力の前に保存する

#チェック
print "$ret<br>\n";
if(($ret>0)&&($ret<10)){
print"もう少し時間をあけてアクセスしてください<br>\n";
exit;
}

#ok
print"いらっしゃい<br>\n";
exit;

この回答への補足

補足という形で申し訳ありませんが、無事にCookieが無効だとエラーを出すようにでき、解決しました!!
方法を伝授していただき、改めて本当にありがとうございました!
本当に感謝です!!!!!

補足日時:2007/09/14 07:15
    • good
    • 0
この回答へのお礼

おお! すばらしい!!!
私の思い通りの動作をしてくれます!!

やはり、Cookieが無効だと機能しませんでしたね。
ちょっとおしいです。とりあえず、Cookieが無効だとエラーを出すことを考えてみます。
どうもありがとうございました!!!感謝です。

お礼日時:2007/09/14 04:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報