使用 Perl 和 CGI 设置和检索 cookie

创建 cookie 时可以设置多个参数。
这不仅适用于 Perl 和 CGI,也适用于所有其他开发环境。
我们需要用来设置 cookie 的唯一必需参数是 cookie 名称。

还应提及的其他参数是 cookie 到期日期。
一些浏览器甚至不接受没有到期日期的 cookie,但大多数没有到期日期的 cookie 被接受并且只为当前会话保存。

要创建将保存为多个会话的 cookie,必须设置 cookie 过期时间。
使用以下代码 Perl/CGI 创建一个 cookie:

  • 名称: CGI-PERL-COOKIE-EXAMPLE
  • 价值:cookie.onitroad.com
  • 保质期:一年后
#!/usr/bin/perl -T
use strict;
use CGI qw/:standard/;
my $cookie = cookie(
	-name=>'CGI-PERL-COOKIE-EXAMPLE',
	value=>'cookie.onitroad.com',
	-expires=>'+1y');
print header (-cookie=>$cookie),
	start_html('CGI Cookie with Exipire Date'),
	p("Cookie had been saved !\n"),
end_html;
exit;

将代码保存到 /usr/lib/cgi-bin/expiry-date-cookie.cgi 并使其可执行:

# chmod 755 /usr/lib/cgi-bin/expiry-date-cookie.cgi

如果浏览器允许我们查看所有存储的 cookie,我们应该能够找到我们自己的 cookie。
这是使用 Firefox 浏览器时我的 cookie 的屏幕截图。

要使用 Perl/CGI 检索 cookie,请使用以下代码。
确保我们设置了正确的 cookie 名称:

#!/usr/bin/perl -T
use strict;
use CGI qw/:standard/;
my $retrieve_cookie = cookie('CGI-PERL-COOKIE-EXAMPLE');
print header,
start_html,
p("Cookie value is $retrieve_cookie\n"),
end_html;
exit;

以下代码使用与创建 cookie 相同的原则,但规模更大。
创建 cookie 时,我们需要记住,每个域最多只能有 20 个 cookie。
使用以下代码同时创建多个 cookie。
代码首先创建一个标量变量来保存 cookie 定义,然后我们以数组的形式打印包含两个 cookie 的标题。

#!/usr/bin/perl -T
use strict;
use CGI qw/:standard/;
my $cookie1 = cookie(-name=>'cookie_one',value=>'value1',expires=>'+1d');
my $cookie2 = cookie(-name=>'cookie_two',value=>'value2',expires=>'+10y');
print header (-cookie=>[$cookie1,$cookie2]),
start_html('CGI Multiple Cookie Example'),
p("Cookies received!\n"),
end_html;
exit;

类似地,下面的代码一次检索多个 cookie:

#!/usr/bin/perl -T
use strict;
use CGI qw/:standard/;
my $retrieve_cookie1 = cookie('cookie_one');
my $retrieve_cookie2 = cookie('cookie_two');
print header,
start_html,
p("COOKIE_ONE Value: $retrieve_cookie1 \n"),
p("COOKIE_TWO Value: $retrieve_cookie2 \n"),
end_html;
exit;
日期:2020-07-07 20:54:59 来源:oir作者:oir