Options Indexes FollowSymLinks AllowOverride None PerlRequire "/www/HTML-Mason/myapp.pl" SetHandler perl-script PerlHandler HTML::Mason #### package HTML::Mason; use HTML::Mason; use strict; use Apache::DBI; my $dbsource = "dbi:mysql:myapp"; my $dbuser = 'myapp'; my $dbpass = 'mypass'; # Import some modules for use in components { package HTML::Mason::Commands; use vars qw(%session); use CGI::Cookie; use CGI::Carp; use Apache::DBI; use Apache::Session::MySQL; use Mail::Sendmail; } # Create a new Mason parser my $parser = new HTML::Mason::Parser; # Create a new Mason interpreter my $interp = new HTML::Mason::Interp (parser => $parser, comp_root => '/www/htdocs/carboncontacts/', data_dir => '/www/HTML-Mason/'); # Create a new Mason ApacheHandler my $ah = new HTML::Mason::ApacheHandler (interp => $interp); # Make sure that things are done as nobody, and not root! chown ( [getpwnam('www')]->[2], [getgrnam('www')]->[2], $interp->files_written ); # ----------------------------------------------------------- # Create our content handler. sub handler { # Get the Apache request object my $r = shift; # Only handle text return -1 if defined($r->content_type) && $r->content_type !~ m|^text/|io; # Get the incoming cookies my %cookies = parse CGI::Cookie($r->header_in('Cookie')); # Try to re-establish an existing session eval { tie %HTML::Mason::Commands::session, 'Apache::Session::MySQL', ($cookies{'AF_SID'} ? $cookies{'AF_SID'}->value() : undef), { DataSource => $dbsource, UserName => $dbuser, Password => $dbpass }; }; # If we could not re-establish an existing # session, create a new session. if ( $@ ) { if ( $@ =~ m#^Object does not exist in the data store# ) { tie %HTML::Mason::Commands::session, 'Apache::Session::MySQL', undef, { DataSource => $dbsource, UserName => $dbuser, Password => $dbpass }; undef $cookies{'AF_SID'}; } } if ( !$cookies{'AF_SID'} ) { my $cookie = new CGI::Cookie(-name => 'AF_SID', -value => $HTML::Mason::Commands::session{_session_id}, -path => '/myapp/'); $r->header_out('Set-Cookie', => $cookie); } my $status = $ah->handle_request($r); untie %HTML::Mason::Commands::session; return $status; } 1; #### CREATE TABLE sessions ( id CHAR(32) NOT NULL PRIMARY KEY, a_session TEXT );