I am a little rusty (switched to telecomm ... just doing some web work on
the side now), but my script "looks" okay to me.  The archive and many
hours to trying different things do not seem to be helping.  Has anyone
seen this before, or can you see a problem with it?  TIA

System Info
===========
# uname -a
Linux localhost.localdomain 2.4.18-14 #1 Wed Sep 4 13:35:50 EDT 2002 i686
i686 i386 GNU/Linux
# rpm -q mod_perl
mod_perl-1.99_05-3
# rpm -q httpd
httpd-2.0.40-8

Conf snippet
============
<Directory "/var/www/html">
# This mod_perl Output filter wraps html output in the standard template
    PerlOutputFilterHandler InfoMart::TemplateOutputFilter
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

<Directory "/var/www/html/ztest">
    PerlFixupHandler InfoMart::SessionFixupHandler
</Directory>

SessionFixupHandler.pm
======================
#!/usr/bin/perl

package InfoMart::SessionFixupHandler;

use strict vars;
use warnings;

use Apache2 ();

use Apache::RequestRec ();
use Apache::RequestIO ();

use APR::Table ();

use Apache::Const -compile => 'OK';

use CGI::Cookie;
#use Apache::Session::Postgres;

sub handler {
  my $r = shift;

  my $table = $r->headers_in();
  my $cookies = parse CGI::Cookie($table->get("Cookie"));

  my $sessionID = ($cookies && $cookies->{'sessionID'} ?
    $cookies->{'sessionID'}->value : undef);

#TODO: validate the sessionID.  set $sessionID to undef if invalid

  if (!defined($sessionID)) {
    $r->handler('modperl');
    $r->push_handlers(PerlResponseHandler => sub {set_cookie});
  } else {
    $r->notes->set(sessionID => "$sessionID");
#    my %session;
#    tie %session, Apache::Session::Postgres, $sessionID, {
#      DataSource => 'dbi:Pg:dbname=sessions',
#      Commit     => 1
#    };
#$session{"foo"}="bar";
#    $r->notes->set('session' => \%session);
  }

  return Apache::OK;
}

sub set_cookie {
  my $r = shift;

#  my %session;
#  tie %session, Apache::Session::Postgres, undef, {
#    DataSource => 'dbi:Pg:dbname=sessions',
#    Commit     => 1
#  };
  my $sessionID = 'foo';
#  my $sessionID = $session{_session_id};
  my $cookie = CGI::cookie(-name=>"sessionID",
                           -value=>$sessionID,
                           -expires=>"+1h",
                           -path=>"/",
                           -domain=>"www.miabusinc.com",
                          );
  $r->err_headers_out->add('Set-Cookie' => $cookie);
  $r->headers_out->set(Location => 
"http://www.miabusinc.com/cgi-bin/cookie_check.cgi?src=";.($r->uri));
  $r->status(302);
  $r->send_http_header;

  return Apache::OK;
}

1;


Error
=====
[Sun Feb 23 21:26:07 2003] [error] [client 12.236.181.139] Can't locate
object method "push_handlers" via package "Apache::RequestRec" at
/usr/lib/perl5/site_perl/5.8.0/InfoMart/SessionFixupHandler.pm line 33.

Reply via email to