Egg::Model::Auth::Session::FileCache - Session management for AUTH component.


Egg-Release-Authorize documentation Contained in the Egg-Release-Authorize distribution.

Index


Code Index:

NAME

Top

Egg::Model::Auth::Session::FileCache - Session management for AUTH component.

SYNOPSIS

Top

  package MyApp::Model::Auth::MyAuth;
  ..........

  __PACKAGE__->config(
    filecache => {
      cache_root  => MyApp->path_to('cache'),
      namespace   => 'AuthSession',
      cache_depth => 3,
      .............
      ......
      },
    );

  __PACKAGE__->setup_session( FileCache => qw/ Bind::Cookie / );

DESCRIPTION

Top

An easy session function is offered to the AUTH component by Cache::FileCache.

To use it, Cache::FileCache is set by 'filecache' of the configuration. And, 'FileCache' is set by 'setup_session' method.

If neither it nor Bind system component are set up, Egg::Model::Auth::Bind::Cookie is specified with the client following 'FileCache' because the mistress cannot injure.

  __PACKAGE__->setup_session( FileCache => qw/ Bind::Cookie / );

This module doesn't come to annul the session data positively. Please set by the configuration concerning auto_purge or receive the Cache::FileCache object from 'filecache' method and control data.

METHODS

Top

filecache

Cache::FileCache The object is returned.

make_session_id

Session ID is generated and it returns it.

Session ID is generated with Digest::SHA1 or Digest::MD5.

The character string length of session ID can be set by 'session_id_length' of the configuration.

The AUTH controller must Obarraid it this method when you want to generate original session ID.

get_session ([SESSION_ID])

The session data corresponding to SESSION_ID is returned.

set_session ([SESSION_DATA_HASH], [SESSION_ID])

The session data is preserved. And, session ID is passed to 'set_bind_id'.

When SESSION_ID is omitted, new session ID is received from 'make_session_id' method.

remove_session ([SESSION_ID])

The session data corresponding to SESSION_ID is annulled.

SEE ALSO

Top

Egg::Release, Egg::Model::Auth, Egg::Model::Auth::Bind::Cookie, Cache::FileCache, UNIVERSAL::require,

AUTHOR

Top

Masatoshi Mizuno <lushe&64;cpan.org>

COPYRIGHT AND LICENSE

Top


Egg-Release-Authorize documentation Contained in the Egg-Release-Authorize distribution.

package Egg::Model::Auth::Session::FileCache;
#
# Masatoshi Mizuno E<lt>lusheE<64>cpan.orgE<gt>
#
# $Id: FileCache.pm 347 2008-06-14 18:57:53Z lushe $
#
use strict;
use warnings;
use Carp qw/ croak /;
use Cache::FileCache;
use UNIVERSAL::require;

our $VERSION= '0.01';

sub _setup {
	my($class, $e)= @_;
	my $config= $class->config;
	my $c= $config->{filecache} ||= {};
	$c->{cache_root} ||= $e->config->{dir}{cache};
	$c->{namespace}  ||= do {
		my $pkg= ref($class) || $class;
		$pkg=~m{([^\:]+)\:+[^\:]+$};
		"auth_". lc($1);
	  };
	$c->{cache_depth} ||= 3;
	$c->{default_expires_in} ||= $config->{cache_interval};
	my $len= $c->{session_id_length} ||= 32;
	unless ($class->can('make_session_id')) {
		my $function= Digest::SHA1->require ? 'Digest::SHA1::sha1_hex': do {
			$@=~m{} and die $@;
			Digest::MD5->require or die $@;
			'Digest::MD5::md5_hex';
		  };
		no strict 'refs';  ## no critic.
		no warnings 'redefine';
		*{"${class}::make_session_id"}= sub {
			substr( &$function(time. $$. rand(1000). {}), 0, $len );
		  };
	}
	$class->mk_accessors('session_id');
	$class->next::method($e);
}
sub filecache {
	$_[0]->{filecache} ||= Cache::FileCache->new($_[0]->config->{filecache});
}
sub get_session {
	my($self)= @_;
	my $id   = $self->{session_id} ||= $self->get_bind_id || return 0;
	my $data = $self->filecache->get($id) || return 0;
	my $tmp  = $data->{___session_id} || return 0;
	$id eq $tmp ? $data : 0;
}
sub set_session {
	my $self= shift;
	my $data= shift || croak 'I want session data.';
	my $id= $self->{session_id} ||= $self->make_session_id;
	$data->{___session_id}= $id;
	$self->filecache->set( $id => $data );
	$self->set_bind_id($id);
	$data;
}
sub remove_session {
	my $self= shift;
	my $id= $self->session_id || return 0;
	$self->filecache->remove($id);
	$self->next::method($id);
}

1;