我正在编写一个接收 POST 方法提交的小型 Perl 页面。我希望能够防止一个人/计算机多次提交表单(以避免重复提交泛滥)。但是我找不到任何关于如何在 Perl CGI 中执行此操作的示例或解释。你能建议或指导我举一些例子吗?我知道我可以使用 HTTP 标头中的一些数据(令牌?)和/或在第一次提交后植入 cookie,但我不确定如何。
任何帮助将不胜感激。最好的问候,-Arseny
我正在编写一个接收 POST 方法提交的小型 Perl 页面。我希望能够防止一个人/计算机多次提交表单(以避免重复提交泛滥)。但是我找不到任何关于如何在 Perl CGI 中执行此操作的示例或解释。你能建议或指导我举一些例子吗?我知道我可以使用 HTTP 标头中的一些数据(令牌?)和/或在第一次提交后植入 cookie,但我不确定如何。
任何帮助将不胜感激。最好的问候,-Arseny
避免用户多次单击按钮的最简单方法是在您的页面中添加一些 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',
));
}