如何在 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
广告