HTTP协议是无状态协议。但是对于商业网站,需要在不同页面之间维护会话信息。例如,一个用户注册在跨越多个页面的交易之后结束。但是,如何在所有网页上维护用户的会话信息?
在许多情况下,使用Cookie是记住和跟踪偏好,购买,佣金和其他信息(以获得更好的访问者体验或站点统计信息所需)的最有效方法。
您的服务器以cookie的形式向访问者的浏览器发送一些数据。浏览器可以接受cookie。如果是这样,它将以纯文本记录的形式存储在访问者的硬盘上。现在,当访问者到达您网站上的另一个页面时,就可以检索该cookie。一旦检索到,您的服务器就知道/记住存储了什么。
Cookies是5个可变长度字段的纯文本数据记录-
过期-Cookie过期的日期。如果为空,则cookie将在访问者退出浏览器时过期。
域-您站点的域名。
路径-设置cookie的目录或网页的路径。如果要从任何目录或页面检索cookie,则该字段可以为空白。
安全-如果此字段包含“安全”一词,则只能使用安全服务器检索cookie。如果该字段为空白,则不存在此类限制。
名称=值-Cookies以键和值对的形式设置和重新查看。
将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.nhooo.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非常容易。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