Hi
I am trying to use the CGI::Application::Plugin::Session but I am getting
a bit confused with what objects are what.
...
Ok. I have made some progress in pinnign this down and it seems I have a
problem with the session object.
This code recreates the scenario.
package GSystem::Test;
use base 'CGI::Application';
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI::Application::Plugin::Session;
sub cgiapp_init {
my $self = shift;
my $session_path;
CGI::Session->name('lsid');
$self->session_config(
CGI_SESSION_OPTIONS => [ "driver:File", $self->query, {
Dir=>'D:\sessions\\' } ], # running on windows/IIS
DEFAULT_EXPIRY => '+5m',
SEND_COOKIE => 0,
);
}
sub setup {
my $self = shift;
$self->start_mode('no_lsid');
$self->run_modes(
'got_lsid' => 'got_lsid',
'no_lsid' => 'no_lsid'
);
}
sub cgiapp_prerun {
my $self = shift;
my $session = $self->session;
if ($self->query->param('lsid') ) {
$self->prerun_mode('got_lsid');
} else {
$self->session->param('rsid', 'SOME_VALUE');
$self->prerun_mode('no_lsid');
}
}
sub got_lsid {
my $self = shift;
my $lsid = $self->session->id;
my $rsid = $self->session->param('rsid');
my $output = <<EOF;
<html><body>Got lsid $lsid - rsid is $rsid</body></html>
EOF
return $output;
}
sub no_lsid {
my $self = shift;
my $lsid = $self->session->id;
my $output = <<EOF;
<html><body>New lsid is $lsid - <a href =
"http://my.url.com/test.pl?lsid=$lsid">Link</a></body></html>
EOF
return $output;
}
1;
If I call this with no parameters it returns a link with the new session
id as a value to lsid. If I click on this then it runs the got_lsid run
mode but has not successfully retrieved the rsid value from the session
data and has created a new session id.
I just tried recreating this using CGI::Session directly and it worked as I
had hoped, even with cookies disabled in my browser.
################################
use strict;
#use warnings;
use CGI qw/:standard/;
use CGI::Session;
my $cgi = new CGI;
CGI::Session->name('lsid');
my $session = new CGI::Session("driver:File", $cgi,
{Directory=>'D:\sessions\\'});
$session->expire('+5m');
my $lsid = $session->id;
my $rsid;
if ($cgi->param('lsid') ) {
$rsid = $session->param('rsid');
print $cgi->header;
print <<EOF;
<html><body>Got lsid $lsid - rsid is $rsid</body></html>
EOF
} else {
$session->param('rsid','SOME_VALUE');
print $cgi->header;
print <<EOF;
<html><body>New lsid is $lsid - <a href =
"http://my.url.com/test_noca.pl?lsid=$lsid">Link</a></body></html>
EOF
}
exit;
##################
The notable difference is that I can see the session data files appearing in
D:\sessions whereas they were not with my previous attempt. Any thoughts?
Mark
##### CGI::Application community mailing list ################
## ##
## To unsubscribe, or change your message delivery options, ##
## visit: http://www.erlbaum.net/mailman/listinfo/cgiapp ##
## ##
## Web archive: http://www.erlbaum.net/pipermail/cgiapp/ ##
## Wiki: http://cgiapp.erlbaum.net/ ##
## ##
################################################################