# CookieApp.pm # Example showing how to use cookies with CGI::Application package CookieApp; use lib qw(/home/redantig/perl /home/r/redantig/redantig/perl); use base 'CGI::Application'; use HTML::Template; use strict; #sub cgiapp_init { # Optional application init (such as DB connect) #} sub setup { my $self = shift; $self->start_mode('mode1'); $self->run_modes( 'mode1' => 'cookie_mode1', 'mode2' => 'cookie_mode2', ); } #sub teardown { # Optional application shutdown (such as DB disconnect) #} # Welcome message, retreive old cookies, HTML form sub cookie_mode1 { # Get CGI query object my $self = shift; my $query = $self->query(); # Get cookie info my $last_time_visited = $query->cookie('last_time_visited'); my $first_name = $query->cookie('first_name'); my $last_name = $query->cookie('last_name'); my $first_visit = (!$last_time_visited) ? 1 : 0; # Open the html template my $template = HTML::Template->new(filename => 'cookieapp1.tmpl.html'); # Fill in some parameters $template->param( FIRST_VISIT => $first_visit, LAST_TIME_VISITED => $last_time_visited, FIRST_NAME => $first_name, LAST_NAME => $last_name, ); # parse the template and output to browser return $template->output; } # Resume message, write cookies sub cookie_mode2 { # Get CGI query object my $self = shift; my $query = $self->query(); # Get 'remove' flag my $remove_cookies = $query->param('remove_cookies'); # Get 'update' flag my $update_cookies = $query->param('update_cookies'); my $expires; my $first_name; my $last_name; my $last_time_visited; if ($remove_cookies) { # Clear to show empty values, cookies are removed upon writing header # Let's expire minus 1 day (yesterday), that is ASAP $expires = '-1d'; $first_name = ''; $last_name = ''; $last_time_visited = ''; } else { # Let's expire in 3 months $expires = '+3M'; if ($update_cookies) { # Update cookie values $first_name = $query->param('first_name'); $last_name = $query->param('last_name'); $last_time_visited = localtime; } else { # Just show current cookies values $first_name = $query->cookie('first_name'); $last_name = $query->cookie('last_name'); $last_time_visited = $query->cookie('last_time_visited'); } } # Create cookies my $first_name_cookie = $query->cookie(-name=>'first_name', -value=>$first_name, -expires=>$expires, ); my $last_name_cookie = $query->cookie(-name=>'last_name', -value=>$last_name, -expires=>$expires, ); my $last_time_visited_cookie = $query->cookie(-name=>'last_time_visited', -value=>$last_time_visited, -expires=>$expires, ); # Write cookies to header $self->header_props(-cookie=>[$first_name_cookie, $last_name_cookie, $last_time_visited_cookie]); # Open the html template my $template = HTML::Template->new(filename => 'cookieapp2.tmpl.html'); # Fill in some parameters $template->param( REMOVE_COOKIES => $remove_cookies, LAST_TIME_VISITED => $last_time_visited, FIRST_NAME => $first_name, LAST_NAME => $last_name, ); # parse the template and output to browser return $template->output; } 1;