CGI-MxScreen
view release on metacpan or search on metacpan
MxScreen/Session/Medium/File.pm view on Meta::CPAN
DFEATURE my $f_;
my $self = shift;
my ($id) = @_;
DREQUIRE defined $self->serializer, "already called set_serializer()";
my $path = $self->_id_to_path($id);
my $lockmgr = $self->{lockmgr};
my $lock = $lockmgr->lock($path);
my $array = $self->_retrieve_locked($path);
$lock->release if defined $lock;
return DVAL undef unless defined $array;
my $token = CGI::param(MX_TOKEN);
CGI::delete(MX_TOKEN); # Invisible to end-user
if ($array->[0] ne $token) {
logerr "context token mismatch";
return DVAL undef;
}
return DVAL $array->[1];
}
#
# ->_retrieve_locked
#
# retrieve context from (locked) file.
#
sub _retrieve_locked {
DFEATURE my $f_;
my $self = shift;
my ($path) = @_;
my $serializer = $self->serializer;
local *FILE;
unless (sysopen(FILE, $path, O_RDONLY)) {
logerr "can't open session file $path: $!";
return DVAL undef;
MxScreen/Session/Medium/File.pm view on Meta::CPAN
# We're storing the context, with a random key pre-pended to validate
# the tupple session-ID/random-key at retrieve time. This prevents
# forging a session ID.
#
# We use the _generate_session_id feature from our parent to get
# a random token.
#
my $store = [$self->_generate_session_id, $context];
$self->_store_locked($path, $store);
$lock->release if defined $lock;
#
# Return the hidden parameters to generate in the HTML output.
#
my $ret = {
&MX_SESSION_ID => $id,
&MX_TOKEN => $store->[0],
};
return DVAL $ret;
}
#
# ->_store_locked
#
# Store context into (locked) file.
#
sub _store_locked {
DFEATURE my $f_;
my $self = shift;
my ($path, $context) = @_;
my $serializer = $self->serializer;
local *FILE;
unless (sysopen(FILE, $path, O_WRONLY|O_CREAT|O_TRUNC)) {
logerr "can't create session file $path: $!";
return DVOID;
MxScreen/Session/Medium/Raw_File.pm view on Meta::CPAN
require CGI::MxScreen::Session::Medium::File;
use vars qw(@ISA);
@ISA = qw(CGI::MxScreen::Session::Medium::File);
use Carp::Datum;
use Getargs::Long;
use Log::Agent;
use Fcntl;
#
# ->_retrieve_locked -- redefined
#
# retrieve context from (locked) file.
#
sub _retrieve_locked {
DFEATURE my $f_;
my $self = shift;
my ($path) = @_;
require Storable;
my $ref = Storable::retrieve($path);
logerr "unable to retrieve from session file $path" unless defined $ref;
return DVAL $ref;
}
#
# ->_store_locked -- redefined
#
# Store context into (locked) file.
#
sub _store_locked {
DFEATURE my $f_;
my $self = shift;
my ($path, $context) = @_;
require Storable;
my $ok = $self->shared ?
Storable::nstore($context, $path) :
Storable::store($context, $path);
( run in 0.804 second using v1.01-cache-2.11-cpan-49f99fa48dc )