Thanks, Andrey. I'll give it a try.
Jared
At 9:06 PM +0200 3/15/06, Andrey Yevsyukov wrote:
Hi
Try using that:
--- part of httpd.conf ---
PerlModule CGI
PerlModule HTML::Mason::ApacheHandler
PerlSetVar MasonArgsMethod CGI
<Perl>
package SITE::Mason;
use strict;
use HTML::Mason::ApacheHandler;
use CGI::Cookie;
{
package HTML::Mason::Commands;
use vars qw(%session);
use CGI::Cookie;
use Apache::Session::File;
}
my $mason_dirs = {
www => {
comp_root => "some-components-root",
data_dir => "some-data-dir",
sessions_dir => "some-dir-for-sessions"
},
# <more-sites>
};
my $ah = {};
foreach my $site (keys %$mason_dirs) {
$ah->{$site} = HTML::Mason::ApacheHandler->new (
comp_root => $mason_dirs->{$site}->{comp_root},
data_dir => $mason_dirs->{$site}->{data_dir}
);
}
sub handler {
my ($r) = @_;
my $site = $r->dir_config("site");
my %cookies = parse CGI::Cookie($r->headers_in->get('Cookie'));
my $site_session_id = uc($site).'_Session_ID';
my $site_session_dir = $mason_dirs->{$site}->{sessions_dir};
eval {
tie %HTML::Mason::Commands::session, 'Apache::Session::File',
($cookies{$site_session_id} ? $cookies{$site_session_id}->value() : undef),
{
Directory => $site_session_dir,
LockDirectory => $site_session_dir
};
};
if ($@) {
if ($@ =~ m/^Object does not exist in the data store/) {
tie %HTML::Mason::Commands::session, 'Apache::Session::File',
undef,
{
Directory => $site_session_dir,
LockDirectory => $site_session_dir
};
undef $cookies{$site_session_id};
}
}
if ( !$cookies{$site_session_id} ) {
my $cookie = new CGI::Cookie (
-name => $site_session_id,
-value => $HTML::Mason::Commands::session{_session_id},
-path => '/'
);
$r->headers_out->set('Set-Cookie', $cookie);
}
my $status = $ah->{$site}->handle_request($r);
untie %HTML::Mason::Commands::session;
return $status;
}
</Perl>
PerlSetVar site www
AddType application/x-_javascript_ mjs
AddType text/html mhtml
AddType text/css mcss
<LocationMatch "(\.mjs|\.mcss|\.mhtml)$">
SetHandler perl-script
PerlHandler SITE::Mason
</LocationMatch>
------------------------------------
Good luck
Andrey

