/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;
}