/usr/lib/cgi-bin/sess.pl
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Session;
use Data::Dumper;
my $cgi = new CGI;
my $session = new CGI::Session();
my $controller = $cgi->Vars;
&dispatch;
sub dispatch {
my $controller = $cgi->Vars;
if ( exists $controller->{login} ) {
&login;
}
elsif ( exists $controller->{logout} ) {
&logout;
}
print $cgi->header(
-cookie => $cgi->cookie( $session->name => $session->id ) );
if ( $session->param('~logged') ) {
print &page_welcome_back;
}
else {
print &page_welcome;
}
}
sub login {
my $user = $cgi->param('user') || 'anonymous';
my $pass = $cgi->param('pass') || '';
my $name = 'John Doe';
$session->param( '~logged', 'True' );
$session->param( 'user', $user );
$session->param( 'name', $name );
}
sub logout {
$session->clear( ['~logged'] );
}
sub page_welcome {
return
$cgi->start_html( -title => 'welcome' )
. $cgi->h1("welcome to my site.")
. $cgi->a( { href => '/cgi-bin/sess.pl?login&' }, 'Login' )
. $cgi->hr()
. $cgi->pre( $ENV{REQUEST_URI} )
. $cgi->end_html;
}
sub page_welcome_back {
return $cgi->start_html( -title => 'Logged user' )
. $cgi->h1( "welcome back "
. $session->param('name')
. sprintf( " (%s)", $session->param('user') ) )
. $cgi->a( { href => '/cgi-bin/sess.pl?logout&' }, 'Logout' )
. $cgi->hr()
. $cgi->pre( $ENV{REQUEST_URI} )
. $cgi->pre( Dumper( $controller ) )
. $cgi->end_html;
}