in reply to Re^3: ie with cgi::session not showing same session id which it was set and firefox doesn't show at all
in thread ie with cgi::session not showing same session id which it was set and firefox doesn't show at all

Thanks for Data::Dumper, info.

After reading CGI::Session twice, dumper data, started to give clues, and using debugging i could solve my session management problem.

But don't know why still, around 6 out of 10, scenarios fails completely in browser and command line mode. No existing session data is captured, or even when session is set to expire in 5 hours, it still creates new session

$VAR1 = bless( { '_STATUS' => 1, '_OBJECTS' => {}, '_CLAIMED_ID' => un +def, '_DATA' => { '_SESSION_ID' => undef, '_SESSION_ATIME' => undef, +'_SESSION_REMOTE_ADDR' => '127.0.0.1', '_SESSION_CTIME' => undef }, ' +_QUERY' => bless( { '.parameters' => [], 'use_tempfile' => 1, '.chars +et' => 'ISO-8859-1', '.cookies' => undef, '.fieldnames' => {}, 'param +' => {}, 'escape' => 1 }, 'CGI' ), '_DRIVER_ARGS' => {}, '_DSN' => { +'serializer' => 'default', 'id' => 'md5', 'driver' => 'file' } }, 'CG +I::Session' ); Content-Type: text/html; charset=ISO-8859-1
code of index.pl
my $cgi = CGI->new; print $cgi->header(); my $session = CGI::Session->load() or die CGI::Session->errstr; if ( $session->is_expired ) { print "Your session timed out! Refresh the screen to start new + session!"; exit(0); } elsif ( $session->is_empty ) { $session = $session->new() or die $session->errstr; print $session->header(); print $session->id(); $session->expire("5h"); print "<a href='called.pl'>call</a></br></br>"; print Dumper($session); $session->flush(); } else { print "session found"; print "<a href='called.pl'>call</a></br></br>"; }
and code of called page
my $cgi = CGI->new; print $cgi->header(); my $session = CGI::Session->load() or die CGI::Session->errstr; print Dumper($session); print "<a href='index.pl'>index</a></br></br>"; $session->flush();

So, I have to test further, would soon post update on this

  • Comment on Re^4: ie with cgi::session not showing same session id which it was set and firefox doesn't show at all
  • Select or Download Code

Replies are listed 'Best First'.
Re^5: ie with cgi::session not showing same session id which it was set and firefox doesn't show at all
by Anonymous Monk on Aug 23, 2013 at 09:33 UTC

    But don't know why still, around 6 out of 10, scenarios fails completely in browser

    Well, the new code you posted you use  print $cgi->header(); but this will never prints a session cookie, CGI.pm doesn't know anything about CGI::Session, see Re: CGI::Session "cache" issue, use $session->header, otherwise there is no session . no cookie means no sessionid means no session -- it may exist on the server, but the browser doesn't know anything about it (doesn't exist)

    fails completely in browser and command line mode.

    how are you passing the sessionid on the commandline?

      THANK YOU VERY MUCH, FOR HELP, EXPLANATIONS, AND REFERENCES. It worked as expected.
      my $cgi = CGI->new; my $session = CGI::Session->load() or die CGI::Session->errstr; if ( $session->is_expired ) { print "Your session timed out! Refresh the screen to start new + session!"; exit(0); } elsif ( $session->is_empty ) { $session = CGI::Session->new () or die CGI::Session->errstr; $session->expire("2h"); print $session->header(); print "<a href='called.pl'>call</a></br></br>"; print Dumper($session); } else { print $session->header(); print "session found"; print "<a href='called.pl'>call</a></br></br>"; } $session->flush();
      and
      my $cgi = CGI->new; my $session = CGI::Session->load() or die CGI::Session->errstr; print $session->header(); print $session->dump(); print "<a href='index.pl'>index</a></br></br>"; $session->flush();