in reply to Re: How to keep an object between HTTP requests?
in thread How to keep an object between HTTP requests?

I use mod_perl under Apache2. Currently I'm examining Apache::Session module.
  • Comment on Re^2: How to keep an object between HTTP requests?

Replies are listed 'Best First'.
Re^3: How to keep an object between HTTP requests?
by Corion (Patriarch) on Feb 15, 2010 at 09:14 UTC

    It's easily possible to keep objects persistent per Apache process using mod_perl. If you need finer grained resolution, like for example per-user or per-session, then looking into one of the Session modules is worth it. Not every session module can handle large objects, as not all of them employ Storable to persist your large objects.

      I tried to use CGI::Session together with CGI for keeping CustomObject between web page updates:

      /cgi-bin/session:

      #!/usr/bin/perl -wT use strict; use warnings; use CGI; use CGI::Session; use CustomObject; my $cgi = new CGI; my $session = new CGI::Session("driver:File", $cgi, {Directory => "/tm +p"}); print $cgi->header(-type => "text/html", -charset => "utf-8"), $cgi->start_html("Session management"); # Initialize session object. unless ($session->param("custom_object")) { my $customObject = new CustomObject("test_login", "test_password") +; $session->param("custom_object", $customObject); print $cgi->p("Custom object initialized"); } my $customObject = $session->param("custom_object"); print $cgi->p("Login: " . $customObject->login()), $cgi->p("Password: " . $customObject->password()), $cgi->end_html();

      /usr/lib/perl5/site_perl/CustomObject.pm:

      package CustomObject; sub login { my $self = shift; return $self->{LOGIN}; } sub new { my ($className, $login, $password) = @_; my $self = bless { LOGIN => $login, PASSWORD => $password }, $className; return $self; } sub password { my $self = shift; return $self->{PASSWORD}; } 1;

      All I get is that CustomObject is instantiated each web page update and the /tmp directory is populated with cgisess_* files.

        Let me ask you a simple question, how is your session ID being stored on the web page?

        I don't see your session ID being stored as a cookie, nor as a hidden variable anywhere. How is the web page supposed to know which session you are referring too?

        Figure out how to manage your session ID on the web page and then use that ID to retrieve a specific session. Then you will be alright.

        Are you sure that your session works without your object?

      It's easily possible to keep objects persistent per Apache process using mod_perl.
      Bad idea. It's very unlikely you'll get the same Apache process on the next request.