Perl Cookies

Cookies are used to maintain state information between the web server and the client browser. For example, if the client filled out a survey, rather than displaying the survey form the next time they view, the results of the survey may be displayed:

Setting a cookie

The below sets a cookie to expire in 1 year. It sets a cookie name of "ospoll" and a value of "done" to indicate an operating system poll was taken by the client.

#!/usr/local/bin/perl
# Place a cookie on the user's machine to show the poll was taken.
$fut_time=gmtime(time()+365*24*3600)." GMT";  # Add 12 months (365 days)
$cookie = "ospoll=done; path=/; expires=$fut_time; $secure";
print "Set-Cookie: " . $cookie . "\n";

Using CGI.pm

#!/usr/local/bin/perl

use CGI;
$cgiCkie = new CGI;
$fut_time=gmtime(time()+365*24*3600)." GMT";  # Add 12 months (365 days)

$cookie = $cgiCkie->cookie(-name=>‘ospoll’,
               -value=>‘done’,
               -expires=>$fut_time,
               -path=>‘/’);
print $cgiCkie->header(-cookie=>$cookie);

Getting a Cookie

The following example reads the cookies into the string value $recvd_cookies. Then it splits each cookie into an array of strings with the line:

@cookies = split /;/, $rcvd_cookies;

Then it checks each cookie in the array to see if a cookie name of "ospoll" with the value of "done" or "start" exists and sets appropriate flags.




#!/usr/local/bin/perl

#Check to see if a cookie with the name ospoll1 and value done or start are on the client
$rcvd_cookies = $ENV{'HTTP_COOKIE'};
@cookies = split /;/, $rcvd_cookies;
foreach $cookie (@cookies)
{
   if ($cookie eq "ospoll1=done")
   { 
      $polltaken=1; #Poll was previously taken
   }
   if ($cookie eq "ospoll1=start")
   {
       $pollready=1;
   }
}