如何在Perl中的CGI中使用Cookies?

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

在许多情况下,使用Cookie是记住和跟踪偏好,购买,佣金和其他信息(以获得更好的访问者体验或站点统计信息所需)的最有效方法。

这个怎么运作

您的服务器以cookie的形式向访问者的浏览器发送一些数据。浏览器可以接受cookie。如果是这样,它将以纯文本记录的形式存储在访问者的硬盘上。现在,当访问者到达您网站上的另一个页面时,就可以检索该cookie。一旦检索到,您的服务器就知道/记住存储了什么。

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

  • 过期-Cookie过期的日期。如果为空,则cookie将在访问者退出浏览器时过期。

  • -您站点的域名。

  • 路径-设置cookie的目录或网页的路径。如果要从任何目录或页面检索cookie,则该字段可以为空白。

  • 安全-如果此字段包含“安全”一词,则只能使用安全服务器检索cookie。如果该字段为空白,则不存在此类限制。

  • 名称=值-Cookies以键和值对的形式设置和重新查看。

设置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.niaoge.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。重要的是要注意,在发送魔术行“ Content-type:text / html \ r \ n \ r \ n”之前已设置cookie

检索Cookie

检索所有设置的cookie非常容易。Cookies存储在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