0

POST メソッドの送信を受け取る小さな Perl ページを書いています。1 人の人/コンピューターがフォームを複数回送信するのを防ぐことができるようにしたい (繰り返しの送信によるフラッディングを避けるため)。しかし、Perl CGI でこれを行う方法についての例や説明が見つかりません。いくつかの例を教えてください。HTTP ヘッダー (トークン?) からのデータを使用したり、最初の送信後に Cookie を設定したりできることは理解していますが、その方法がわかりません。

どんな助けでも大歓迎です。敬具、 -アーセニー

4

1 に答える 1

1

ユーザーがボタンを何度もクリックするのを避ける最も簡単な方法は、ページに Javascript を追加することです。これは、スクリプトやF5.

<input type="submit" name="go" id="go" value="go" onclick="this.disabled='disabled'"/>

また、ユーザーの IP アドレスとタイムスタンプを保持するログ ファイル/データベースをサーバーに書き込み、ユーザーが既に送信されているかどうかを確認することもできます。Cookie の設定と確認に加えて、これを行うのがおそらく最善の方法です。

Cookie については、ドキュメントのCookieを参照してください。CGI簡単な例:

use strict; use warnings;
use CGI;

my $q = new CGI;

my $submitted = 0;
if ($q->cookie('submitted ')) {
  $submitted = 1;
}
# Here you could place the file/db check to also set $voted
if ($submitted) {
  print $q->header('text/plain');
  print "You have already submitted!";
} else {
  # Do stuff with the form, like $q->param('foo')...
  # Once you're done, place the cookie
  print $q->header(
    -type   => 'text/plain', 
    -cookie => $q->cookie(
      -name    => 'submitted',
      -value   => 1,
      -expires => '+1y',
  ));
}
于 2012-07-16T12:54:39.293 に答える