"(and at this point I'm doubting that will ever surface)."
Oh, ye of little faith. :-P
Here's the code for the 'initialize_session' method that's called from the 'cgiapp_init' method of the 'Base.pm' module that's inherited from 'CGI::Application':
sub initialize_session
{
my $self = shift;
my $q = $self->query();
my $session = CGI::Session->new('driver:File',
$q->cookie('CGISESSID') || $q->param('CGISESSID') || undef,
{ Directory=>'/ctrlacc/lhdsurv/session/mid_yr_rpt_survey' }
)
or die($CGI::Session::errstr);
# 05-17-2005: See if following code works
# expire the session itself after 1 idle hour
$session->expire('+1h');
#Initialize the session and get the id.
my $sessionid = $session->id();
$self->param('sessionid'=>$sessionid);
$self->param('session'=>$session);
if ( (! defined($q->cookie('CGISESSID'))) or ($sessionid ne $q->cookie('CGISESSID')) )
{
# If the session has expired, reset the cookie
$self->header_add(-cookie => $q->cookie(-name => 'CGISESSID', value => $sessionid, -path=>'/')
);
}
} | [reply] |
Thank you, I like being mistaken in that way :)
You might want to consider using CGI::Application::Plugin::Session. All that code you have could be boiled down to the following:
use CGI::Application::Plugin::Session;
my %options =
(
Directory => "/ctrlacc/lhdsurv/session/mid_yr_rpt_survey"
);
$self->session_config(
CGI_SESSION_OPTIONS => [ undef, $self->query, \%options ],
SEND_COOKIE => 1,
);
and it would be more readable. I typically throw that in the cgiapp_init() method of my CGI::Application base class, but if you wanted to throw it in it's own function it's probably alright.
And I've never had any luck setting expiration times with CGI::Session. They never work for me. Either don't expire the cookie, or set it to expire as soon as the browser closes.
Good luck, I hope this helps!
MrCromeDome | [reply] [d/l] |