[id://perrin]. Yep clear. Basically, borrowing from Apache::Singleton, here's the relevant code.
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; } }
In reply to Re^4: RFC Singleton Sessions
by derby
in thread RFC Singleton Sessions
by derby
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |