0
我正在寫一個接收POST方法提交的小Perl頁面。我希望能夠防止單個人/計算機多次提交表單(以避免重複提交氾濫)。但是我無法找到關於如何在Perl CGI中執行此操作的示例或解釋。你能建議還是直接給我一些例子? 我知道我可以使用來自HTTP標頭(令牌?)的一些數據和/或第一次提交後種植一個cookie,但我不知道如何。避免用戶使用Perl提交表單兩次(CGI)
任何幫助將不勝感激。 最好的問候, -Arseny
我正在寫一個接收POST方法提交的小Perl頁面。我希望能夠防止單個人/計算機多次提交表單(以避免重複提交氾濫)。但是我無法找到關於如何在Perl CGI中執行此操作的示例或解釋。你能建議還是直接給我一些例子? 我知道我可以使用來自HTTP標頭(令牌?)的一些數據和/或第一次提交後種植一個cookie,但我不知道如何。避免用戶使用Perl提交表單兩次(CGI)
任何幫助將不勝感激。 最好的問候, -Arseny
避免用戶多次單擊按鈕的最簡單方法是將一些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',
));
}
謝謝! 你能否告訴我在哪裏可以得到我的CGI提交者的IP?它會在CGI類型對象的某個地方嗎? – 2012-07-16 13:21:07
'$ q-> remote_addr()' - 參見[獲取環境變量](http://search.cpan.org/dist/CGI/lib/CGI.pm#FETCHING_ENVIRONMENT_VARIABLES) – simbabque 2012-07-16 13:30:04