如何在 Perl 的 CGI 中使用 Cookie?


HTTP 协议是一种无状态协议。但对于商业网站,需要在不同页面之间维护会话信息。例如,一个用户注册会在跨越多个页面的交易后结束。但是如何跨所有网页维护用户的会话信息呢?

在许多情况下,使用 Cookie 是记住和跟踪偏好、购买、佣金以及其他改善访客体验或网站统计信息所需信息的最有效方法。

工作原理

您的服务器以 Cookie 的形式向访客的浏览器发送一些数据。浏览器可能会接受 Cookie。如果接受,它将作为纯文本记录存储在访客的硬盘驱动器上。现在,当访客访问您网站上的另一个页面时,Cookie 可供检索。检索后,您的服务器就知道/记住存储的内容。

Cookie 是 5 个可变长度字段的纯文本数据记录 -

  • **Expires** - Cookie 将过期的日期。如果为空,则 Cookie 将在访客退出浏览器时过期。
  • **Domain** - 您网站的域名。
  • **Path** - 设置 Cookie 的目录或网页的路径。如果您想从任何目录或页面检索 Cookie,则可以为空。
  • **Secure** - 如果此字段包含单词“secure”,则 Cookie 只能通过安全服务器检索。如果此字段为空,则不存在此类限制。
  • **Name = Value** - Cookie 以键值对的形式设置和检索。

设置 Cookie

向浏览器发送 Cookie 非常容易。这些 Cookie 将与 HTTP 标头一起发送。假设您想将 UserID 和 Password 作为 Cookie 设置。因此,它将按如下方式完成 -

#!/usr/bin/perl
print "Set-Cookie:UserID = XYZ;\n";
print "Set-Cookie:Password = XYZ123;\n";
print "Set-Cookie:Expires = Tuesday, 31-Dec-2007 23:12:40 GMT";\n";
print "Set-Cookie:Domain = www.tutorialspoint.com;\n";
print "Set-Cookie:Path = /perl;\n";
print "Content-type:text/html\r\n\r\n";
...........Rest of the HTML Content goes here....

这里我们使用 **Set-Cookie** HTTP 标头来设置 Cookie。可选设置 Cookie 属性,例如 Expires、Domain 和 Path。需要注意的是,Cookie 在发送神奇行 **"Content-type:text/html\r\n\r\n"** 之前设置。

检索 Cookie

检索所有已设置的 Cookie 非常容易。Cookie 存储在 CGI 环境变量 HTTP_COOKIE 中,它们将具有以下形式。

key1 = value1;key2 = value2;key3 = value3....

以下是如何检索 Cookie 的示例。

#!/usr/bin/perl
$rcvd_cookies = $ENV{'HTTP_COOKIE'};
@cookies = split /;/, $rcvd_cookies;
foreach $cookie ( @cookies ) {
   ($key, $val) = split(/=/, $cookie); # splits on the first =.
   $key =~ s/^\s+//;
   $val =~ s/^\s+//;
   $key =~ s/\s+$//;
   $val =~ s/\s+$//;
   if( $key eq "UserID" ) {
      $user_id = $val;
   } elsif($key eq "Password") {
      $password = $val;
   }
}
print "User ID = $user_id\n";
print "Password = $password\n";

这将产生以下结果,前提是上述 Cookie 在调用检索 Cookie 脚本之前已设置。

User ID = XYZ
Password = XYZ123

更新时间: 2019年12月2日

2K+ 阅读量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告