package TestProj ; use strict; use base 'CGI::Application'; use HTML::Template; use CGI::FormBuilder; use CGI::Session; sub setup { my $self = shift; $self->mode_param('rm'); $self->run_modes( 'mode1' => 'login', 'mode2' => 'firstpage', 'mode3' => 'secondpage', 'mode4' => 'logout' ); $self->start_mode('mode1'); } #Code for login page sub login { my $self = shift; my $query = $self->query(); my @fields = qw(username password rm sid); my $form = CGI::FormBuilder->new( title => 'TestProj Login Screen', header => 1, method => 'post', fields => \@fields, template => './tmpl/login.tmpl', required => 'ALL', submit => 'Login', ); $form->field(name => 'username', type => 'text'); $form->field(name => 'password', type => 'password'); $form->field(name => 'rm', type => 'hidden'); $form->field(name => 'rm', value => 'mode2'); $form->field(name => 'sid', type => 'hidden'); if($form->submitted eq 'Login') { my $username = $query->("username"); my $password = $query->("password"); #user authentication check code will go here if($username eq 'someval' && $password eq 'someval') { #create session in case user is valid my $session = new CGI::Session( undef, undef, {Directory=> +'/tmp/sessions'}); my $sid = $session->id(); $form->field(name => 'sid', value => $sid); $session->param('logged-in','y'); } else { #using loggedout.tmpl with message invalid user name or password my $template = HTML::Template->new(filename => './tmpl/log +gedout.tmpl'); $template->param(reason => 'Invalid Username or Password: Login Again' ); $template->param(link => './testproj.pl' ); print $template->output; } } else { print $form->render; } } sub firstpage { my $self = shift; my $query = $self->query; my $sid = $query->{'sid'}[0]; my $session = CGI::Session->load(undef, $sid , {Directory=>'/tmp/sessions'}); print "Content-Type: text/html\n\n"; if($session->param('logged-in') eq 'y') { #Code for first page } else { #Call loggedout.tmpl with incvalid session message } } sub secondpage { my $self = shift; my $query = $self->query; my $sid = $query->("sid"); my $session = CGI::Session->load(undef, $sid , {Directory=>'/tmp/s +essions'}); print "Content-Type: text/html\n\n"; if($session->param('logged-in') eq 'y') { #Code for second page } else { #Call loggedout.tmpl with invalid session message } } sub logout { my $self = shift; my $query = $self->query; my $sid = $query->("sid"); my $session = CGI::Session->load(undef, $sid , {Directory=>'/tmp/s +essions'}); $session->flush(); $session->delete(); print "Content-Type: text/html\n\n"; #using template loggedout.tmpl with logged out message my $template = HTML::Template->new(filename => './tmpl/loggedout.t +mpl'); #fill the loggedout.tmpl template $template->param(reason => 'Logged Out' ); $template->param(link => './testproj.pl' ); print $template->output; } 1;