lemonldap-ng/modules/apache-session-memorycached/lib/Apache/Session/Memorycached.pm
2008-02-15 10:50:55 +00:00

137 lines
4.3 KiB
Perl
Executable File

#############################################################################
#
# Apache::Session::Memorycached
# Apache persistent user sessions on the network with memcached
# Copyright(c) eric german <germanlinux@yahoo.fr>
# Distribute under the Artistic License
#
############################################################################
package Apache::Session::Memorycached;
use strict;
use vars qw(@ISA $VERSION);
$VERSION = '2.2.1';
@ISA = qw(Apache::Session);
use Apache::Session;
use Apache::Session::Generate::MD5;
use Apache::Session::Lock::Memorycached;
use Apache::Session::Store::Memorycached;
sub populate {
my $self = shift;
$self->{object_store} = new Apache::Session::Store::Memorycached $self;
$self->{lock_manager} = new Apache::Session::Lock::Memorycached $self;
$self->{generate} = \&Apache::Session::Generate::MD5::generate;
$self->{validate} = \&Apache::Session::Generate::MD5::validate;
$self->{serialize} = \&Apache::Session::Memorycached::none;
$self->{unserialize} = \&Apache::Session::Memorycached::none;
return $self;
}
sub none {
my $self = shift;
my $session = shift;
return;
}
sub DESTROY {
my $self = shift;
$self->save;
$self->{object_store}->close;
$self->release_all_locks;
}
1;
=pod
=head1 NAME
Apache::Session::Memorycached - An implementation of Apache::Session
=head1 SYNOPSIS
use Apache::Session::Memorycached;
tie %session, 'Apache::Session::Memorycached', $cookie, {
'servers' => ["10.75.1.19:11211"], #all write operations
'local' => ["localhost:11211"], #read-only operations
'timeout' => '300'
};
tie %s, 'Apache::Session::Memorycached', undef,
{servers => ['mymemcachedserver:port'],
'timeout' => '300',
'updateOnly' => 1 ,
'principal' => uid,
};
In order to optimize the network ,you can use a local memcached server.
All read-only opération are sending fisrt at local server .If you need write ou rewrite data , the data is sending at the principal memcached sever and local cache too for synchronisation.
note : 'updateOnly' => 1 just realize up-date operation not init operation.
Init operation is use in order to book and lock the number session but it's not available in this module
'principal' => uid : this parameter is use to create reverse reference
like this : MD5_hex(uid) => id_session in memcached server . By this it usefull to retrieve id_session from principal name . And add uid_MD5 => MD5_hex(uid) in main session .
=head1 DESCRIPTION
This module is an implementation of Apache::Session. It uses the memcached system backing
store . You may specify servers (principal) and locals caches for locking in arguments to the constructor. See the example, and the documentation for Apache::Session::Store::Memorycached and Cache::Memcached .
=head1 REPLICATION
Now Apache::Session::Memorycahed inclues replication between memecached servers
Two new components provide a replication service .
First package is Apache::Session::MemcachedReplicator
Second is Apache::Session::MemcachedClient
It's now possible to do replication master to slave or master to master
see man pages and scripts .
=head1 SOAP service
Now Apache::Session::Memorycached inclues a SOAP service in order to set or
get %session in any language . The SOAP service translates data in Perl hashes
=head2 Installation of SOAP service
All scripts are in scripts directory
Put MemcachedSOAPClass.pm and MemcachedSOAP.cgi in the cgi-bin directory of your apache server with the appropriate right (x) .
Change in MemcachedSOAP.cgi the memcached server address .
(line 11 : $machine = 'ip.ip.ip.ip:11211'; )
Try the three scripts statTest.pl (first !) then getTest.pl finish with setTest.pl.
The lemonldap project (SSO under GPL) uses this module
=head1 AUTHOR
This module was written by eric german <germanlinux@yahoo.fr>.
Completed by Habib ZITOUNI <zitouni.habib@gmail.com> and
Hamza AISSAT<asthamza@hotmail.fr>
SOAP service is a contribution of Casimir ANTUNES .
=head1 SEE ALSO
L<Apache::Session::DB_File>, L<Apache::Session::Flex>,
L<Apache::Session::MemcachedClient>,L<Apache::Session::MemcachedReplicator>,
L<Apache::Session::MySQL>, L<Apache::Session::Postgres>, L<Apache::Session>