2012-07-16 55 views
0

我正在寫一個接收POST方法提交的小Perl頁面。我希望能夠防止單個人/計算機多次提交表單(以避免重複提交氾濫)。但是我無法找到關於如何在Perl CGI中執行此操作的示例或解釋。你能建議還是直接給我一些例子? 我知道我可以使用來自HTTP標頭(令牌?)的一些數據和/或第一次提交後種植一個cookie,但我不知道如何。避免用戶使用Perl提交表單兩次(CGI)

任何幫助將不勝感激。 最好的問候, -Arseny

回答

1

避免用戶多次單擊按鈕的最簡單方法是將一些JavaScript添加到您的頁面。這將不起作用的腳本或即按F5

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

你也可以寫保存用戶和時間標記的IP地址的服務器上的日誌文件/數據庫,並檢查他是否爲已提交。除了設置和檢查cookie之外,這樣做可能是一條路。

有關cookie,請參閱CGI文檔中的cookies。簡單的例子:

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', 
)); 
} 
+0

謝謝! 你能否告訴我在哪裏可以得到我的CGI提交者的IP?它會在CGI類型對象的某個地方嗎? – 2012-07-16 13:21:07

+1

'$ q-> remote_addr()' - 參見[獲取環境變量](http://search.cpan.org/dist/CGI/lib/CGI.pm#FETCHING_ENVIRONMENT_VARIABLES) – simbabque 2012-07-16 13:30:04