package My::Session;
...
use vars qw( $GLOBAL_SESSION );
...
sub new {
my( $class, $args ) = @_;
$args->{log} ||= My::Log->new();
my $instance = $class->_get_instance( $args );
unless( defined $instance ) {
$instance = $class->_new_instance( $args );
$class->_set_instance( $instance );
}
return $instance;
}
sub _get_instance {
my( $class, $args ) = @_;
if( $ENV{MOD_PERL} ) {
$args->{log}->debug( "Getting mod_perl session instance" );
my $req = Apache->request();
my $key = "$class\::_instance";
return $req->pnotes( $key );
} else {
$args->{log}->debug( "Getting cgi session instance" );
return $GLOBAL_SESSION;
}
}
sub _new_instance {
my( $class, $args ) = @_;
my $self = {};
$self->{log} = $args->{log};
$self->{log}->debug( "creating new session instance" );
bless $self, $class;
# call method to load access privs here
return $self;
}
sub _set_instance {
my( $class, $instance ) = @_;
if( $ENV{MOD_PERL} ) {
$instance->{log}->debug( "setting new mod_perl instance" );
my $req = Apache->request();
my $key = "$class\::_instance";
$req->pnotes( $key, $instance );
} else {
$instance->{log}->debug( "setting new cgi instance" );
$GLOBAL_SESSION = $instance;
}
}
|